home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 March / Macworld (1998-03) (Disk 1).dmg / Shareware World / Info / For Developers / GhostScript 5.10 / MacGS-510 / doc / devices.txt < prev    next >
Text File  |  1997-09-30  |  106KB  |  2,353 lines

  1.    Copyright (C) 1992, 1995 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of Aladdin Ghostscript.
  4.   
  5.   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  6.   or distributor accepts any responsibility for the consequences of using it,
  7.   or for whether it serves any particular purpose or works at all, unless he
  8.   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  9.   License (the "License") for full details.
  10.   
  11.   Every copy of Aladdin Ghostscript must include a copy of the License,
  12.   normally in a plain ASCII text file named PUBLIC.  The License grants you
  13.   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  14.   under certain conditions described in the License.  Among other things, the
  15.   License requires that the copyright notice and this notice be preserved on
  16.   all copies.
  17.  
  18. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  19.  
  20. This file, devices.txt, gives more detailed documentation about
  21. certain specific devices for which Ghostscript can produce output.
  22.  
  23. For an overview of Ghostscript and a list of the documentation files, see
  24. README.
  25.  
  26. Devices for which this file currently contains documentation:
  27.     SPARCprinter
  28.     HP DeskJet 520, 540, and 560C
  29.     HP DeskJet 500C & 550C
  30.     HP PaintJet, XL, and XL300
  31.     DEC LJ250
  32.     Apple Dot Matrix Printer (and Imagewriter)
  33.     Epson Stylus Color Printer
  34.     ESC/P, ESC/P2 Color-Printers
  35.     Canon BJC-600/BJC-4000/BJC-70 and BJC-800 BubbleJet Color Printers
  36.       (and Apple StyleWriter 2x00)
  37.         uniprint - a configurable ESC/P, ESC/P2 & HP-RTL/PCL-Driver
  38.     JPEG files
  39.  
  40. ### ------------------------- The SPARCprinter ------------------------- ###
  41.  
  42. This section was written by Martin Schulte.
  43.  
  44. Introduction
  45. ------------
  46.  
  47. The SPARCprinter is is connected to SPARCStation via a special SBUS card's
  48. video interface, the picture is composed on the host and only a bitmap is
  49. send to the printer unit.
  50.  
  51. Together with a SPARCprinter, you always buy (as far as I know) software
  52. that enables you to do postscript-printing on your SPARCPrinter.
  53.  
  54. So, the need for a Ghostscript-Interface to the SPARCPrinter seems low,
  55. but on the other hand some Postscript drawings are not correctly printed
  56. with SUN's software: on some pages occurred a thin vertical line of rubbish
  57. (reproduceable), on some Mathematica drawings the text at the axes wasn't
  58. rotated.
  59.  
  60. I tried all of these with Ghostscript and always got the expected results.
  61.  
  62. However, replacing proprietary software should never be a bad idea.
  63.  
  64. The problem is that there has yet been no effort to make the SPARCPrinter-
  65. driver behave like a BSD output-filter, I made my tests using the script
  66. mentioned under Installation.
  67.  
  68. Installation
  69. ------------
  70.  
  71. Add sparc.dev to DEVICE_DEVS and compile ghostscript as described in
  72. make.txt.
  73.  
  74. Afterwards, you can use the following script (the way of handling standard
  75. input versus filename-arguments doesn't look very clever, has anyone a
  76. better idea ?) to print if you substitute <GSPATH> by the place where you
  77. installed the ghostscript binary:
  78.  
  79. outcmd1='/vol/local/lib/troff2/psxlate -r'
  80. outcmd2='<GSPATH> -I/home/schulte/gs252 -sDEVICE=sparc -sOUTPUTFILE=/dev/lpvi0 -'
  81.  
  82. if [ $# -eq 0 ]
  83. then
  84.   $outcmd1 | $outcmd2
  85. else
  86.   cat $* | $outcmd1 | $outcmd2
  87. fi
  88.  
  89. Problems
  90. --------
  91.  
  92. Since /dev/lpvi can only be opened for exclusive use, another job having
  93. opened it (engine_ctl_sparc or another ghostscript as the most probable
  94. candidates) will cause to stop ghostscript with "Error: /invalidfileaccess
  95. in --.outputpage--"
  96.  
  97. In case of common printer problems like out of paper, a warning describing
  98. the reason will be printed to stdout, the driver will try to access again
  99. and again each five seconds.
  100.  
  101. Due to a problem with the device-driver (in the kernel) the reason of
  102. printer failure is not always correctly reported to program.  This is the
  103. case at least if you open the top cover (Error in the display: E5).  Look
  104. to the display at the printer if a "Printer problem with unknown reason"
  105. is reported.
  106.  
  107. Fatal errors will cause the print-job to be terminated.
  108.  
  109. ### ------------------------------ End --------------------------------- ###
  110.  
  111. ### ------------------- H-P color inkjet printers ---------------------- ###
  112. ###  (DeskJet 500C, DeskJet 550C, PaintJet, PaintJet XL, PaintJet XL300  ###
  113. ###  and the DEC LJ250 which can operate in a Paintjet-compatible mode)  ###
  114.  
  115. This section was written by George Cameron.
  116.  
  117. Information and tips on usage for the drivers contained in gdevcdj.c
  118. ====================================================================
  119.  
  120. OVERVIEW:
  121.  
  122. There are 6 generic drivers contained in the source module:
  123.  
  124.      1 - cdj500:      HP DeskJet 500C and 540C
  125.      2 - cdj550:      HP DeskJet 550C, 560C, 660C, 660Cse
  126.      3 - pjxl300:     HP PaintJet XL300 and DeskJet 1200C
  127.      4 - pjtest:      HP PaintJet
  128.      5 - pjxltest:    HP PaintJet XL
  129.      6 - declj250:    DEC LJ250
  130.  
  131.  All of these drivers have 8-bit (monochrome), 16-bit and 24-bit
  132.      (colour) and for the DJ 550C 32-bit, (colour, cmyk mode)
  133.      options in addition to standard colour and mono drivers.
  134.  It is also possible to set various printer-specific parameters
  135.      from the gs command line, eg.
  136.  
  137.   gs -sDEVICE=cdeskjet -dBitsPerPixel=16 -dDepletion=1 -dShingling=2 tiger.ps
  138.  
  139. NB/ The old names cdeskjet, cdjcolor and cdjmono drivers have been retained;
  140.     however, their functionality duplicates that available using the above
  141.     drivers (and cdeskjet is identical to cdj500), ie. we can use:
  142.  
  143.     gs -sDEVICE=cdj500 -dBitsPerPixel=24 ...    for cdjcolor, and
  144.     gs -sDEVICE=cdj500 -dBitsPerPixel=1  ...    for cdjmono
  145.  
  146.  
  147. DEFAULT PAPER SIZE:
  148.  
  149.  If the preprocessor symbol A4 is defined, the default paper size is the
  150.  European A4 size; otherwise it is the U.S. letter size (8.5"x11"). Other
  151.  paper sizes (including A3 for the PaintJet XL and PaintJet XL300) may be
  152.  specified on the command line as explained in the Ghostscript documentation.
  153.  
  154.  
  155. DEFAULT BITS-PER-PIXEL:
  156.  
  157.  If the preprocessor symbol BITSPERPIXEL is defined as an integer (see below
  158.  for the range of allowable values), this number will be used to define the
  159.  default bits-per-pixel (ie. bit depth) for the generic drivers. If the
  160.  symbol is not defined, the default is set to 24 bits per pixel. It is
  161.  of course still possible to specify the value from the command line, as
  162.  described below. Note also that the cdeskjet, cdjcolor and cdjmono
  163.  drivers are unaffected by setting this symbol, as their default settings
  164.  are predefined to be 1, 3 and 24 respectively.
  165.  
  166.  
  167. DESKJET PHYSICAL LIMITS:
  168.  
  169.  Maximum printing width = 2400 dots = 8". The printer manuals say that the
  170.  maximum recommended printing height on the page is 10.3", but since this
  171.  is obviously not true for A4 paper, and I have been unable to detect any
  172.  problems in printing longer page lengths, this would seem to be a rather
  173.  artificial restriction.
  174.  
  175.  All Deskjets have 1/2" unprintable bottom margin, due to the mechanical
  176.  arrangement used to grab the paper. Side margins are approximately 0.25"
  177.  for US Letter paper, and 0.15" for A4.
  178.  
  179.  
  180. COMMAND LINE PARAMETERS:
  181.  
  182.  Several printer 'properties' have been implemented for these printers.
  183.  Those available so far are all integer quantities, and thus may be
  184.  specified as eg.
  185.  
  186.     gs -dBitsPerPixel=32 -dShingling=1 ... 
  187.  
  188.  which sets the BitsPerPixel parameter to 32 and the Shingling parameter
  189.  to 1.
  190.  
  191.  
  192. BITS-PER-PIXEL:
  193.  
  194.  All of the drivers in gdevcdj.c accept a command line option to set the
  195.  BitsPerPixel property. This gives considerable flexibility in choosing
  196.  various trade-offs between speed/quality/colour etc. The valid numbers
  197.  are:
  198.  
  199.     1:    This is a standard Ghostscript monochrome driver, and uses
  200.         black ink (by installing the separate mono cartridge in
  201.         the case of the DeskJet 500C, or automatically for the
  202.         other printers)
  203.  
  204.     3:    A standard Ghostscript colour driver, using internal
  205.         dithering. This is fast to compute and to print, but
  206.         the clustered dithering can lose some detail and
  207.         colour fidelity.
  208.  
  209.     8:    An 'error-diffusion' monochrome driver which uses
  210.         Floyd-Steinberg dithering to print greyscale images.
  211.         The patterns are much more randomised than with the
  212.         normal clustered dithering, but the data files can
  213.         be much larger and somewhat slower to print.
  214.  
  215.     16:    This is a 'cheaper' version of the following (24-bit)
  216.         driver, which generates a Floyd-Steinberg colour dithered
  217.         output using the minimum amount of memory (this may be
  218.         helpful when using IBM PC's when Ghostscript has not
  219.         been compiled using a 32-bit 386-style compiler). The
  220.         quality can be almost as good as the 24-bit version.
  221.  
  222.     24:    A high-quality colour driver using Floyd-Steinberg dithering
  223.         for maximum detail and colour range. However it is very
  224.         memory intensive and thus can be slow to compute (and it
  225.         tends to produce rather larger raw data files, so they
  226.         can also be slower to print).
  227.  
  228.     32:    This is for the DeskJet 550C only, which uses the black
  229.         cartridge and the colour cartridge simultaneously (ie.
  230.         CMYK printing). This printer can be both faster and give
  231.         higher quality than the DeskJet 500C, because of the
  232.         true black ink. (Note that the 24-bit mode also permits
  233.         CMYK printing on this printer, and uses less memory. Any
  234.         differences between 24-bit and 32-bit should be very small.)
  235.  
  236.  
  237. DESKJET PROPERTIES:
  238.  
  239.  The additional properties available for the DeskJets are:
  240.  
  241.     BlackCorrect    (int)      /* Colour correction to give
  242.                    * better blacks when using the DJ500C
  243.                    * in colour mode, eg. the default of 4
  244.                    * reduces the cyan component to 4/5 
  245.                    * Range accepted: 0 - 9 (0 = none) */
  246.     Shingling    (int)      /* Interlaced, multi-pass printing 
  247.                                * 0 = none, 1 = 50%, 2 = 25%, 2 is
  248.                    * best & slowest */
  249.     Depletion    (int)      /* 'Intelligent' dot-removal 
  250.                            * 0 = none, 1 = 25%, 2 = 50%, 1 best
  251.                    * for graphics? 
  252.                    * Use 0 for transparencies */
  253.  
  254. PAINTJET XL300/PAINTJET XL PROPERTIES:
  255.  
  256.     PrintQuality    (int)      /* Mechanical print quality
  257.                    * -1 = fast, 0 = normal, 1 = presentation
  258.                    * Fast mode reduces ink usage and uses
  259.                    * single-pass operation for some media
  260.                    * types. Presentation uses more ink and
  261.                    * max number of passes, ie. slowest
  262.                    * printing for highest quality */
  263.     RenderType    (int)      /* 0 = driver does dithering
  264.                    * 1 = snap to primaries
  265.                    * 2 = snap black -> white, others to black
  266.                    * 3 = ordered dither
  267.                    * 4 = error diffusion
  268.                    * 5 = monochrome ordered dither
  269.                    * 6 = monochrome error diffusion
  270.                    * 7 = cluster ordered dither
  271.                    * 8 = monochrome cluster ordered dither
  272.                    * 9 = user-defined dither (not supported)
  273.                    * 10 = monochrome user-defined dither ns. */
  274.  
  275. PAINTJET PROPERTIES:
  276.  
  277.     No additional properties
  278.  
  279.  
  280. GAMMA CORRECTION:
  281.  
  282.  One consequence of using Floyd-Steinberg dithering rather than Ghostscript's
  283.  default clustered ordered dither is that it is much more obvious that the
  284.  ink dots are rather larger on the page than their nominal 1/180" or 1/300"
  285.  size (clustering the dots tends to minimise this effect). Thus it is often
  286.  the case that the printed result is rather too dark. A simple empirical
  287.  correction for this may be achieved by preceding the actual postscript
  288.  file to be printed by a short file which effectively sets the gamma for
  289.  the device, eg.
  290.  
  291.  gs ... gamma.ps colorpic.ps -c quit
  292.  
  293.  where gamma.ps is
  294.  
  295. %!
  296. {0.333 exp} dup dup currenttransfer setcolortransfer
  297.  
  298.  This example sets the gamma for r, g, and b to 3, which seems to work
  299.  reasonably well in practice.
  300.  
  301.  
  302. GENERAL TIPS:
  303.  
  304.  For all the above printers, the paper is critically important to the 
  305.  final results. Smoother, less fibrous paper is generally better (and
  306.  suggested types are given in the printer manuals). In particular, the
  307.  special ink-jet paper can make a big difference; the colours are 
  308.  brighter, but most importantly, there is almost no colour bleed, even 
  309.  with adjacent areas of very heavy inking. Similarly, the special coated
  310.  transparencies also work well (and ordinary transparencies do not work
  311.  at all!)
  312.  
  313.  The unix-lpr.sh provides one example of setting up a multi-option
  314.  colour postscript lpr queue on Unix systems, and includes the ability
  315.  to choose a range of different colour options and printer accounting
  316.  and error logging.
  317.  
  318.  
  319. CAVEAT EMPTOR!:
  320.  
  321.  It is not always easy for me to test all of these drivers, as the only
  322.  colour printer I have here is the DeskJet 500C. I rely on others testing
  323.  drivers for the additional machines and reporting their findings back to
  324.  me. 
  325.  
  326. HP's 600x300 dpi resolution-enhanced mode for inkjet printers
  327. =============================================================
  328.  
  329. This feature is available on HP's more recent inkjet printers,
  330. including the Deskjet 520 (mono) 540 (mono or colour) and 560C (mono
  331. and colour).
  332.  
  333. The colour and monochrome drivers for the HP deskjet 550c are
  334. (probably) the best you will get for use with ghostscript, for the
  335. following reasons:
  336.  
  337. These printers do not offer true 600x300 dpi resolution. Those that
  338. print in colour are strictly 300x300 dpi in colour mode, while in mono
  339. mode there is a pseudo 600x300 dot mode, with the restriction that you
  340. can't print two adjacent dots. Thus, in effect what you have is 600 dpi
  341. dot positioning, but on average you don't get more dots per line.
  342.  
  343. What this does give is the possibility to have eg. sharper character
  344. outlines, as you can place dots on the edges nearer to their ideal
  345. positions - this is why it is worth doing.
  346.  
  347. However, HP will not support user-level programming of this
  348. resolution-enhanced mode, one reason being that (I understand) all the
  349. dot spacing has to be done by the driver, and if you get it wrong, you
  350. can actually damage the print head.
  351.  
  352. To summarise, you may lose a smidgin of (potential) text clarity using
  353. the 550c drivers (cdj550, cdjcolor, cdjmono etc.), but other than that,
  354. they are the ones for the job.
  355.  
  356. ### ------------------------------ End --------------------------------- ###
  357.  
  358. ### ------------------- Apple Dot Matrix Printer  ---------------------- ###
  359.  
  360. This section was written by Mark Wedel.
  361.  
  362.  The Dot Matrix Driver (DMP) driver is a simple driver I wrote.  It
  363. could more more efficient, but it seems to print the images fine.
  364.  
  365.  The Dot Matrix Printer was a parallel predecessor to the Imagewriter
  366. printer.  As far as I know, the Imagewriter commands are a superset
  367. to those of the Dot Matrix printer, so the driver should work fine at
  368. generating output that can be printed on Imagewriters.
  369.  
  370.  A few notes (from the gdevadmp.c file):
  371.  
  372.  * To print out images, it sets the printer for unidirectional printing
  373.  * and 15 cpi (120 dpi). It sets the line feed to 1/9 of an inch (72 dpi).
  374.  * When finished, it sets things back to bidirectional printing, 1/8" line
  375.  * feeds, and 12 cpi.  There does not appear to be a way to reset
  376.  * things to initial values.
  377.  *
  378.  * This code does not set for 8 bit characters (which is required). It
  379.  * also assumes that carriage return/newline is needed, and not just
  380.  * carriage return.  These are all switch settings on the DMP, and
  381.  * I have configured them for 8 bit data and cr only.
  382.  *
  383.  * You can search for the strings Init and Reset (in devdemp.c) to find the
  384.  * strings that set up the printer and clear things when finished, and change
  385.  * them to meet your needs.
  386.  *
  387.  * Also, you need to make sure that the printer daemon (assuming unix)
  388.  * doesn't change the data as it is being printed.  I have set my
  389.  * printcap file (sunos 4.1.1) with the string:
  390.  * ms=pass8,-opost
  391.  * and it works fine.
  392.  
  393.  Mark Wedel
  394. master@cats.ucsc.edu
  395.  
  396. ### ------------------------------ End --------------------------------- ###
  397.  
  398. ### ------------------ The Epson Stylus Color printer ------------------ ###
  399. /*
  400.  Epson Stylus-Color Driver, contributed by Gunther Hess (address: see below)
  401.  
  402. I N T R O D U C T I O N
  403. =======================
  404. This documentation accompanies version 1.90 of the stcolor-driver.
  405. Compared to version 1.21 (gs3.53) there are just a few, but somehow
  406. important chages:
  407.  
  408.  - Default: noWeave escpBand=1 (-> default works with all known models)
  409.  - added Parameter "Softweave" (useful only with Original STC and PRO-Series)
  410.  - added Compile-Option (-DSTC_SIGNAL) to catch interrupts during printing
  411.    (thanks to Frederic Loyer)
  412.  - compatibility with ansi2knr
  413.  - compatibility with 64Bit Processors
  414.  - clarification of usage with Pro-XL and Stylus Color II
  415.  
  416. A Note on the Version-Numbering: Version 1.xx comes to it's end. 
  417. Any 1.xx > 1.90 will have only Bug-Fixes. Maybe that Version 2.xx
  418. comes to life, if this is the case it will include full support of
  419. the newer models.
  420.  
  421. U S A G E
  422. =========
  423. This driver is selected with "-sDEVICE=stcolor" and produces output for an
  424. Epson Stylus-Color at 360DpI resolution by default, but it can do much
  425. more with this printer and with significantly better quality, than with
  426. the default-mode and it can also produce code for the monochrome-versions
  427. of this printer.
  428.  
  429. This can be achieved either via command-line options or via ghostscript-input.
  430. For convenience a Postscript-File is supplied, that can be used as initial
  431. inputfile. Thus, assumed that ghostscript is invoked via "gs" on your computer,
  432. try the following command:
  433.  
  434.     gs -sDEVICE=stcolor -rXDPIxYDPI stcolor.ps ... (e.g.: your input-files)
  435.  
  436. were XDPI is one of 180/360/720 and YDPI is one of (90/)180/360/720. The result
  437. should be significantly better, you may use "stcolor.ps" with other devices
  438. too, but I do not recommend this, since it does nothing then. "stcolor.ps"
  439. should be available with binary distributions and should reside in the
  440. ghostscript input-directory. Thus if ghostscript is part of your
  441. printer-spooler, you can insert
  442.  
  443.     (stcolor.ps) findlibfile { pop run } if pop
  444.  
  445. to the files you want to run through the improved algorithms and you may want
  446. to adapt this file to your specific needs. The methods and options for this
  447. are described here, but this description is restricted to the gs-options, while
  448. their manipulation at the Postscript-level is documented in "language.txt" and
  449. in the mentioned "stcolor.ps".
  450.  
  451. Next thing is to explain the options (as written on my unix-system).
  452. The order is somehow related to their use during the printing-Process:
  453.  
  454.   -dUnidirectional      - Force unidirectional printing,
  455.                           recommended for transparencies
  456.  
  457.   -dMicroweave          - enable the printers "microweave"-feature.
  458.   -dnoWeave             - disable any Weaving, overrides -dMicroweave
  459.   -dSoftweave           - enable internal weaving of the driver.
  460.  
  461. *   Weave-Note: Softweave works *ONLY* with the original Stylus-Color
  462. *               and the PRO-Series. 
  463.  
  464.   -sDithering="name"    - select another dithering-algorithm, available are:
  465.               "gscmyk"    : fast color-output, with CMYK-ProcessColorModel [D]
  466.               "gsmono"    : fast black & white output
  467.               "gsrgb"     : fast color-output, with RGB-ProcessColorModel
  468.               "fsmono"    : Floyd-Steinberg, Monochrome
  469.               "fsrgb"     : Floyd-Steinberg, with RGB-ProcessColorModel
  470.                             (Almost identical to cdj550/mjcxxx-Algorithm)
  471.               "fsx4"      : Floyd-Steinberg, with CMYK-ProcessColorModel
  472.                             (shares code with fsmono & fsrgb, but is
  473.                              algorithmically really bad)
  474.               "fscmyk"    : Floyd-Steinberg, with CMYK-ProcessColorModel
  475.                             and proper modifications for CMYK
  476.               "hscmyk"    : modified Floyd-Steinberg with CMYK-Model
  477.                             ("hs" stands for "hess" nor for "high speed",
  478.                              but the major difference to "fscmyk" is speed)
  479.               "fs2"       : algorithm by Steven Singer (RGB)
  480.                             should be identical to escp2cfs2.
  481.  
  482.  -dBitsPerPixel=1...32    - number of bits used for pixel-storage, the larger
  483.                             the value, the better the quality - at least in
  484.                             theory. In fsrgb one can gain some speed, when
  485.                             restricting to 24 Bits, rather than the default
  486.                             of 30.
  487.  
  488.  -dFlag0                  - causes some algorithms to select a uniform
  489.                             initialisation rather than a set of random-values.
  490.                             May yield "sharper" image-impression at the
  491.                             cost of "dithering-artifacts".
  492.                             (applies to hscmyk and all fs-modi, except for fs2,
  493.                              which always uses a constant initialization.)
  494.  
  495.  -dFlag1 ... -dFlag4      - available to future algorithms.
  496.  
  497.  -dColorAdjustMatrix={3/9/16 x float}'
  498.                           - This is a Matrix to adjust the colors. Values should
  499.                             be between -1.0 and 1.0, and the number of
  500.                             values depend on the colormodel used by the
  501.                             selected algorithm. In RGB- and CMYK-modi a matrix
  502.                             with 1.0 on the diagonal produces no transformation.
  503.                             (I could not identify a similar feature at the
  504.                             language-level, so this option was implemented, it
  505.                             is really required, but I don't know reasonable
  506.                             values yet.)
  507.  
  508.  -dCtransfer='{float float ...}', -dMtransfer=..., -dY..., -dK... or
  509.  -dRtransfer='{float float ...}', -dG..., -dB... or
  510.  -dKtransfer='{float float ...}'
  511.                           - which is used, depends on the algorithm, which
  512.                             maybe either either CMYK, RGB or monochrome.
  513.                             The values are arrays of floats in the range from
  514.                             0 to 1.0, which represent the visible
  515.                             color-intensity for the device. One may achieve
  516.                             similar effects with "setcolortransfer" at the
  517.                             language-level, but this takes more time and the
  518.                             underlying-code for the driver-specific parameters
  519.                             is still required. The size of the arrays is
  520.                             arbitrary and the defaults are {0.0 1.0}, which
  521.                             is a linear characteristic, most of the code in
  522.                             "stcolor.ps" are better transfer-arrays.
  523.  
  524.  -dKcoding='{float...}', -dC..., -dM... etc.
  525.                           - this are again arrays between 0.0 and 1.0, and
  526.                             they control the internal coding of the
  527.                             color-values. Clever usage of this arrays may
  528.                             yield further enhancements, but no experience yet.
  529.                             [To be discontinued with version >= 2.x]
  530.  
  531.  -sModel=st800            - causes output to be suitable for the monochrome
  532.                             Stylus 800 (no Weaving, no Color).
  533.  
  534.  -sOutputCode=            - can be either "plain", "runlength" or "deltarow"
  535.                             and changes the ESC/P2 (TM) coding-technique used
  536.                             by the driver. The default is to use the
  537.                             runlength-encoding. "plain" selects uncompressed
  538.                             encoding and yields enormous amounts of data to
  539.                             generated.
  540.  
  541.  -descp_Band=1/8/15/24    - Number of Nozzles of scanlines used in printing.
  542.                             Useful only with -dnoWeave. Larger Values yield
  543.                             smaller code, but this doesn't increase the
  544.                             Printing-Speed.
  545.  
  546.  -descp_Width=            - Number of Pixels Printed in each scan-Line.
  547.                             (Useful when tuning Margins only, se below)
  548.  
  549.  -descp_Height=           - Length of the entire Page in Pixels
  550.                             (Parameter of "ESC(C" in default initialization)
  551.  
  552.  -descp_Top=              - Top-Margin in scanlines.
  553.                             (1st Parameter of "ESC(c" in default initialization)
  554.  
  555.  -descp_Bottom=           - Bottom-Margin in scanlines.
  556.                             (2nd Parameter of "ESC(c" in default initialization)
  557.  
  558.  -sescp_Init="..."        - Override for the initialization-sequence.
  559.                             (Must set Graphics-Mode-1 & Units)
  560.  
  561.  -sescp_Release="..."     - Overrides the release-sequence. 
  562.                             (ESC @ FF by default)
  563.  
  564.  Valid Resolutions:
  565.    any, ESC/P2 allows in theory, but only the following are
  566.    known to work with most printers:
  567.  
  568.    -r360x360 (Default)
  569.    -r720x720 (not on STC-IIs ? and st800)
  570.  
  571.  Valid Option Combinations: (Stylus I & PRO-Series only)
  572.  
  573.             escp_Band   ?Weave    escp_Band/#Passes
  574.    180x 90  15         no-Weave
  575.    180x180  1 , 8, 24  no/u-Weave      15/2 sWeave
  576.    180x360                             15/4 sWeave
  577.    180x720                             15/8 sWeave
  578.    360x 90  15         no-Weave
  579.    360x180  1,  8, 24  no/u-Weave      15/2 sWeave
  580.    360x360  1,  8, 24  no/u-Weave      15/4 sWeave
  581.    360x720                             15/8 sWeave
  582.    720x 90  15         no-Weave
  583.    720x180                             15/2 sWeave
  584.    720x360                             15/4 sWeave
  585.    720x720  1          no/u-Weave      15/8 sWeave
  586.  
  587. *************************************************************************
  588. *************************************************************************
  589. **                                                                     **
  590. è**  BEWARE: There are only few validity-checks for parameters. A good **
  591. **          example is "escp_Band": if you set this, the driver tries  **
  592. **          to use your value, even if this value is not supported by  **
  593. **          the printer:                                               **
  594. **                                                                     **
  595. **                     YOU ASKED FOR IT, AND YOU GOT IT!               **
  596. **                                                                     **
  597. *************************************************************************
  598. *************************************************************************
  599.  
  600.  
  601. A P P L I C A T I O N  - N O T E
  602. ================================
  603.  
  604. Quite a bunch of Parameters. Hopefully you never need any of them, besides
  605. feeding "stcolor.ps" to ghostscript in front of your input.
  606.  
  607. After answering some questions over 50 Times, I prepared a STC-FAQ-Collection.
  608. I am currently unable offer this FAQ on the net.
  609. But thanks to Bill Davidson it is available as:
  610.  
  611.     http://www.isisnet.com/bdavidson/gs_stc.FAQ.html
  612.  
  613. And here it comes (as plain text):
  614.  
  615. VERSION:
  616. This FAQ refers to ghostscript > 3.50 with stcolor > 1.20. The former 
  617. release (ghostscript-3.33/stcolor-1.12) used different parameters and 
  618. had some severe bugs. This FAQ is itself version 1.3.
  619.  
  620. TOPIC: Pro XL?
  621. Yes, this driver supports the A3-Size Printer. Simply set the required
  622. pagesize and margins. A simple way to do this, is to specify the
  623. parameter "-sPAPERSIZE=a3" on the command line or to include the
  624. procedure-call "a3" in the postscript-Prolog section. If you want
  625. to optimize the printable area and/or set the proper Margins, see
  626. topic Margins, PageSize.
  627.  
  628. TOPIC: Margins, PageSize
  629. Different than other drivers, i refuse to add code to the stcolor-driver,
  630. that tries to guess the proper margins or pagesize. This is due to the
  631. fact, that i found that such guessing is usually wrong and needs correction
  632. either in the source or the parameters. The following code can be
  633. inserted to "stcolor.ps" after the line:
  634.  
  635.      mark % prepare stack for "putdeviceprops"
  636.  
  637. And this is the new code:
  638.  
  639. /.HWMargins [9.0 39.96 12.6 9.0]     % Left, Bottom, Right, Top (1/72")
  640. /PageSize   [597.6 842.4]            % Paper, including Marings (1/72")
  641. /Margins [ % neg. Offset to Left/Top in Pixels
  642.    4 index 0 get STCold /HWResolution get 0 get mul 72 div neg
  643.    5 index 3 get STCold /HWResolution get 1 get mul 72 div neg
  644. ]
  645.  
  646. Feel free to change the Values for ".HWMargins" and "PageSize" to match
  647. your needs. The given Values are the defaults from the driver, when 
  648. compiled with "-DA4" set.
  649.  
  650. This Option -or it's omission- may cause trouble: The Stylus Color can 
  651. print exactly 8" or 2880Pixel@360DpI. The remaining paper is the
  652. margin, where the left margin varies only slightly with the papersize,
  653. while the right margin ist significantly increased for wider paper,
  654. such as letter.
  655.  
  656. -> If you are using stcolor > 1.20, compiled without "-DA4", on european
  657.    paper, then the Default-Margin is too large. You need to add the 
  658.    proper ".HWMargins" to the command line or stolor.ps
  659.  
  660.  
  661. TOPIC: Stylus Color II / IIs and 1500.
  662. First the good news: The driver can print on the Stylus Color II.
  663. And the bad ones:
  664. - According to Epson-Support the driver "abuses" the color-capabilities.
  665.   (See topic "Future Plans" for details.)
  666. - You need some parameters on the command-line (or in stcolor.ps).
  667. - I doubted that it would be usable with the Stylus Color IIs.
  668.   *BUT* it is usable and suffers from the mixing-Problems!!.
  669.  
  670. To make thinks work, you *MUST* disable the drivers internal 
  671. weaving ("Softweave"). This can be done in two ways:
  672.  
  673.        gs .... -dMicroweave ....
  674.  
  675. or
  676.        gs ... -dnoWeave -descp_Band=1 ....
  677.  
  678. [1.90 fixes this "bug" due to a changed default-behaviour]
  679.  
  680. I experienced significantly increased printing speed with the second
  681. variant on the old Stylus Color, when printing mostly monochrome data.
  682.  
  683. TOPIC: Future Plans
  684. Actually i thought, that the driver is finished by now, but an answer
  685. from Epson triggered future development. This was the answer from
  686. Epson-Support:
  687.  
  688. To: Klaus-Gunther Hess
  689. Subject: Help: Need Programming Info for Stylus-(Color)-Printers
  690.  
  691. The differentiation is necessary, as the printers produce the graphics
  692. differently.  To wit:
  693.  
  694.   CMY Class - ( Stylus Color IIs ) The Stylus Color IIs prints color
  695.   graphics with the three different color inks (cyan, magenta, and yellow).
  696.   Also, black is printed using composit black (mixture of CMY).  For high
  697.   quality laser like black,  a separate black ink cartridge should be used.
  698.  
  699.   CMY + K Class - ( Stylus Color II )  This printer has both a CMY and a
  700.   black ink (K)  cartridge installed at the same time.  However, due to the
  701.   nature of the black ink it can not be mixed or overlaid with the color
  702.   inks.  Therefore, when black is needed, composite black is used.
  703.   If the image calls for pure black (e.g., text), the black cartridge is used.
  704.  
  705.   CMYK Class - ( Stylus Color, Stylus Pro and Pro XL )  These printers
  706.   have a mixable black (K) ink.  This ink is compatible with the CMY inks
  707.   and will not bleed when combined or printed next to the CMY inks.
  708.  
  709. Bruce U.
  710. The Epson Connection 
  711.  
  712. Thus I am working on a version, that supports CMY and CMY + K dithering.
  713. Actually there are also some new (*undocumented*) instructions used by
  714. the windows-driver in conjunction withe the Stylus Color II/IIs, that
  715. raises the need for some more "escp_*" Parameters.
  716.  
  717.  
  718. A C K N O W L E D G E M E N T S
  719. ===============================
  720.  
  721. This driver was "copied" from gdevcdj.c (ghostscript-3.12), which was
  722. contributed by:
  723.     George Cameron      - g.cameron@biomed.abdn.ac.uk
  724.     Koert Zeilstra      - koert@zen.cais.com
  725.     Eckhard Rueggeberg  - eckhard@ts.go.dlr.de
  726.  
  727. Some of the ESC/P2-code was drawn from gdevescp.c, contributed by
  728.     Richard Brown       - rab@eos.ncsu.edu
  729.  
  730. The POSIX-Interrupt-Code is from (Compile-Time-Option -DSTC_SIGNAL)
  731.     Frederic Loyer      - loyer@ensta.fr
  732.  
  733. And several improvements are based on discussions with
  734.     Brian Converse      - BCONVERSE@ids.net
  735.     Bill Davidson       - bdavidson@ra.isisnet.com
  736.     Gero Guenther       - gero@cs.tu-berlin.de
  737.     Jason Patterson     - jason@reflections.com.au
  738.     ? Rueschstroer      - rue@ibe.med.uni-muenchen.de
  739.     Steven Singer       - S.Singer@ph.surrey.ac.uk
  740.  
  741. While I wish to thank all this people mentioned above, they are by no means
  742. responsible for bugs in the stcolor-driver - just for the features.
  743.  
  744. Duisburg 8-May-1996, Gunther Hess
  745.  
  746. up to sometime E-Mail:  gunther@elmos.de
  747. After that time, one should use snail-mail or phone:
  748.  
  749. Gunther Hess                  phone: ++49 203 376273
  750. Richard Wagner Strasse 112
  751. D-47057 Duisburg
  752. Germany
  753.  
  754. R E C O M M E N D A T I O N S
  755. =============================
  756.  
  757. The next section is a contribution from Jason Patterson <jason@reflections.com.au>
  758. who evaluated a previous version (1.17). GhostScript was invoked as follows:
  759.  
  760.    gs -sDEVICE=stcolor [-r720x720] -sDithering=... -sOutputFile=escp.out \
  761.       stcolor.ps whatsoever.ps
  762.  
  763. where "..." is the name of the desired algorithm. "stcolor.ps" was omitted
  764. for the gs-algorithms (gsmono, gsrgb and gscmyk), for which it is useless
  765. *and* it would not allow the selection of "gscmyk".
  766.  
  767. So here comes a very truncated version of Jasons text:
  768.  
  769.              COLOR DITHERING EXPERIMENTS with gdevstc-1.21
  770.              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  771. Here's a bit of feedback about the EPSON Stylus Color driver's different
  772. dithering methods, based on a little experiment using 4 good quality
  773. scanned images of quite varied nature.
  774.  
  775. Here is a summary of the results of the four experiments...
  776.  
  777.  
  778.  gsmono: Pretty much what you'd expect from a mono ordered pattern. Looks
  779.          like what a lot of mono laser printers produce.
  780.  
  781.  fsmono: Excellent for monochrome.
  782.  
  783.  gscmyk: Not very good, but then you'd expect that from an ordered pattern.
  784.  
  785.  gsrgb:  A little better than gscmyk. More consistent looking.
  786.  
  787.  fs2:    Good, but not quite as good as fsrgb. Gets the brightness wrong,
  788.          too light at 720dpi, too dark at 360dpi.
  789.  
  790.  fsrgb:  Very good, but a little too dark and has a slight blue tint.
  791.  
  792.  hscmyk: Excellent. Slightly better than fsrgb and fs2. Better than fscmyk on
  793.          some images, almost the same on most.
  794.  
  795.  fscmyk: Best. Very, *very* slightly better than hscmyk. On some images,
  796.          nearly as good as the EPSON demos (which were done with the
  797.          MS-Windows driver). 
  798.  
  799.  Overall Visual Quality (out of ten):
  800.  
  801.   gsmono |*********
  802.   fsmono |*****************
  803.          |
  804.   gscmyk |********
  805.   gsrgb  |*********
  806.   fs2    |****************
  807.   fsrgb  |*****************
  808.   hscmyk |******************
  809.   fscmyk |******************
  810.          +---------------------
  811.          0 1 2 3 4 5 6 7 8 9 10
  812.  
  813.  best-to-worst order:  color: fscmyk hscmyk fsrgb fs2 gsrgb gscmyk
  814.                         mono: fsmono gsmono
  815.  
  816.  
  817. SANITY NOTE: The above results are only from *four* images, a total of 24
  818.              printouts (8 on 720dpi paper, 16 on plain paper). Your results
  819.              will almost certainly vary, and your standards might not be
  820.              the same as mine, so use these results as a *guide* only, not
  821.              as a formal evaluation.
  822.  
  823. C O L O R - T R A N S F O R M A T I O N
  824. =======================================
  825.  
  826. *NOTE*: Things are changing with version gdevstc > 2.00!
  827.  
  828. In the initial version of the driver, distributed with Ghostscript-3.33,
  829. the parameter "SpotSize" was the only way to manipulate the colors at the
  830. driver-level. According to the parameters enumerated above, this has changed
  831. significantly with version 1.16 and above. This is the result of
  832. an ongoing discussion about dithering-algorithms and "false color" on the
  833. Epson-Stylus-Color. This initiated the transformation of the stcolor-driver
  834. into a framework for different dithering-algorithms, that provides a generalized
  835. interface to the internal Ghostscript-Color-Models and the other data-structures
  836. related to Ghostscript-Drivers.
  837.  
  838. The main thing such a framework should be able to do is to deliver the
  839. values the dithering-algorithm needs and since this influences directly
  840. the optical image impression, this transformation should be adjustable without
  841. the need for recompilation and relinking.
  842.  
  843. In general the process can be described as follows:
  844.  
  845.    ColorAdjustMatrix   Coding                    Transfer
  846.  +---------------------+    +---------------------+    +------------------+
  847.  |  Ghostscript  Color |    | Ghostscript  Raster |    | Dithering  Data  |
  848.  |                     | => | 1/2/4/8/16/24/32Bit | => |   1/3/4x Values  |
  849.  |  1/3/4x16Bit Values |    | for all components  |    | (arbitrary type) |
  850.  +---------------------+    +---------------------+    +------------------+
  851.  
  852. Due to the limitations on raster-storage, information is lost in the first
  853. transformation step, except for the 16Bit Monochrome-Mode. So any color
  854. adjustment should take place before this step and this is where the optional
  855. ColorAdjustMatrix works.
  856.  
  857. The first transformation-step is called "coding" and is controlled by the
  858. ?coding-Arrays. The Decoding-process expands the range of values
  859. pontentially to a larger range than that provided by the initial ghostscript
  860. color-model. It is therefore a reasonable place to make device- and/or
  861. algorithm-specific adjustments. This is the place where the ?transfer-Arrays
  862. are used. Array-Access might be not the fastest method, but its generality
  863. is superior, so this step is always based upon internally algorithm-specific
  864. array-access. If 8Bits are stored per color-component and if the algorithm
  865. uses bytes too, the second transformation is included within the first, what
  866. saves significant computation-time when printing the data.
  867.  
  868.  
  869. ColorAdjustMatrix
  870. -----------------
  871.  
  872. The driver supports different "ProcessColorModel"-Values, which raises the
  873. need for different color-adjustments. In the following "CAM" stands for
  874. ColorAdjustMatrix:
  875.  
  876.    DeviceGray: (3 Floats):
  877.       if((r == g) && (g == b))
  878.          K' = 1.0 - R;
  879.       else
  880.          K' = 1.0 - CAM[0] * R + CAM[1] * G + CAM[2] * B;
  881.  
  882.       According to the documentation in drivers.txt, the latter should
  883.       never happen.
  884.  
  885.    DeviceRGB: (9 Floats)
  886.       if((r == g) && (g == b))
  887.          R' = B' = G' = R;
  888.       else
  889.          R' = CAM[0]*R + CAM[1]*G + CAM[2]*B;
  890.          G' = CAM[3]*R + CAM[4]*G + CAM[5]*B;
  891.          B' = CAM[6]*R + CAM[7]*G + CAM[8]*B;
  892.  
  893.       The Printer uses always four inks, thus a special treatment of black
  894.       is provided. Algorithms may take special action, if r==g==b. Maybe
  895.       that in future versions Kcoding & Ktransfer become active in RGB-Mode.
  896.  
  897.    DeviceCMYK: (16 Floats)
  898.  
  899.       if((c == m) && (m == y))
  900.          K' = max(C,K);
  901.          C' = M' = Y' = 0;
  902.       else
  903.          K  = min(C,M,Y);
  904.          if((K > 0) && ColorAdjustMatrix_present) { => UCR
  905.             C -= K;
  906.             M -= K;
  907.             Y -= K;
  908.          }
  909.  
  910.          C' = CAM[ 0]*C + CAM[ 1]*M + CAM[ 2]*Y + CAM[ 3]*K;
  911.          M' = CAM[ 4]*C + CAM[ 5]*M + CAM[ 6]*Y + CAM[ 7]*K;
  912.          Y' = CAM[ 8]*C + CAM[ 9]*M + CAM[10]*Y + CAM[11]*K;
  913.          K' = CAM[12]*C + CAM[13]*M + CAM[14]*Y + CAM[15]*K;
  914.  
  915.       Again we have a special black-treatment. "max(C,K)" was introduced
  916.       because of a slight misbehaviour of ghostscript, that delivers
  917.       black under certain circumstances as (1,1,1,0). Normally, when
  918.       no special "Black Separation" and "Undercolor Removal" procedures
  919.       are defined at the postscript-level, either (c,m,y,0) or (0,0,0,k)
  920.       values are mapped. This would make the extended ColorAdjustMatrix
  921.       quite tedious, thus during mapping black-separation is done for
  922.       (c,m,y,0)-Requests and if there is a ColorAdjustMatrix, undercolor-
  923.       removal is used too. In other words the Default-Matrix is:
  924.  
  925.                    1 0 0 1
  926.                    0 1 0 1
  927.                    0 0 1 1
  928.                    0 0 0 1
  929.  
  930.        and it is applied to CMYK-Values with separated and removed Black.
  931.        Raising the CMY-Coefficients while lowering the K-coefficients
  932.        reduces black and intensifies color. But be careful, even low
  933.        deviations from the default cause drastic changes.
  934.  
  935. If no ColorAdjustMatrix is set, the matrix-computations are skipped. Thus
  936. the transformation reduces to:
  937.  
  938.     - Range-Inversion in Monochrome-Mode
  939.     - Black-Separation in CMYK-Mode
  940.  
  941.  
  942. RGB/CMYK-coding & -transfer and BitsPerPixel
  943. --------------------------------------------
  944.  
  945. This two (groups) of parameters are arrays of floating point numbers in the
  946. range 0.0 to 1.0. They control the truncation to the desired number of
  947. bits stored in the raster-memory (BitsPerPixel) and the ink-density.
  948.  
  949. The "truncation" may become a nonlinear-function, if any of the ?coding-arrays
  950. are set. Assume the following Ghostscript invocation:
  951.  
  952.     gs -sDEVICE=stcolor -sDithering=fscmyk -dBitsPerPixel=16 \
  953.        -dMcoding='{ 0.0 0.09 0.9 1.0 }' \
  954.                                         -dYtransfer='{ 0.0 0.09 0.9 1.0 }' \
  955.        -dKcoding='{ 0.0 0.09 0.9 1.0 }' -dKtransfer='{ 0.0 0.09 0.9 1.0 }' \
  956.  
  957. We may have ?coding and/or ?transfer, thus four combinations are possible
  958. and this four combinations appear in the given example. The resulting mapping
  959. is given in the following tables, where except for the internal Indices
  960. (4 Components * 4 Bits = 16 BitsPerPixel), all values are normalized to the
  961. Range 0-1. The actual range is 0 to 65535 for the ghostscript-color and
  962. 0 to 16777215 (2^24-1) for the ink-values delivered to the fscmyk-algorithm.
  963. Sorry for the bunch of numbers following, but you may try this example in
  964. conjunction with "stcinfo.ps", what should give you a graphical
  965. printout of the following numbers, when you issue a "showpage"-command:
  966.  
  967.                             CYAN                      MAGENTA
  968.       CI/15 gs_color_values  CI    ink  gs_color_values  CI    ink
  969.       0.000   0.000 - 0.062   0  0.000   -0.123 - 0.123   0  0.000
  970.       0.067   0.063 - 0.125   1  0.067    0.123 - 0.299   1  0.247
  971.       0.133   0.125 - 0.187   2  0.133    0.299 - 0.365   2  0.351
  972.       0.200   0.188 - 0.250   3  0.200    0.365 - 0.392   3  0.379
  973.       0.267   0.250 - 0.312   4  0.267    0.392 - 0.420   4  0.406
  974.       0.333   0.313 - 0.375   5  0.333    0.420 - 0.447   5  0.433
  975.       0.400   0.375 - 0.437   6  0.400    0.447 - 0.475   6  0.461
  976.       0.467   0.438 - 0.500   7  0.467    0.475 - 0.502   7  0.488
  977.       0.533   0.500 - 0.562   8  0.533    0.502 - 0.529   8  0.516
  978.       0.600   0.563 - 0.625   9  0.600    0.529 - 0.557   9  0.543
  979.       0.667   0.625 - 0.687  10  0.667    0.557 - 0.584  10  0.571
  980.       0.733   0.688 - 0.750  11  0.733    0.584 - 0.612  11  0.598
  981.       0.800   0.750 - 0.812  12  0.800    0.612 - 0.639  12  0.626
  982.       0.867   0.813 - 0.875  13  0.867    0.639 - 0.715  13  0.653
  983.       0.933   0.875 - 0.937  14  0.933    0.715 - 0.889  14  0.778
  984.       1.000   0.938 - 1.000  15  1.000    0.889 - 1.111  15  1.000
  985.  
  986. The difference between Cyan and Magenta is the presence of a Coding-Array.
  987. The coding-process must map a range of color-values to each of the 16
  988. component-indices. If no coding-array is given, this is accomplished
  989. by a division with 4096 -equivalent to a right-shift by 12 Bits-. The
  990. final ink-density resides in the given interval and moves form the left to
  991. the right side from 0 to 15. In the Magenta-case, there is a coding array
  992. and the ink-value matches the center of the intervals. But the distribution
  993. of the mapped intervals follows the given Coding-Array and is nonlinear in
  994. the linear color-space of ghostscript.
  995.  
  996. Now let us take a look at the case with Transfer-Arrays:
  997.  
  998.                            YELLOW                      BLACK
  999.       CI/15 gs_color_values  CI    ink  gs_color_values  CI    ink
  1000.       0.000   0.000 - 0.062   0  0.000     -0.123-0.123   0  0.000
  1001.       0.067   0.063 - 0.125   1  0.018      0.123-0.299   1  0.067
  1002.       0.133   0.125 - 0.187   2  0.036      0.299-0.365   2  0.133
  1003.       0.200   0.188 - 0.250   3  0.054      0.365-0.392   3  0.200
  1004.       0.267   0.250 - 0.312   4  0.072      0.392-0.420   4  0.267
  1005.       0.333   0.313 - 0.375   5  0.090      0.420-0.447   5  0.333
  1006.       0.400   0.375 - 0.437   6  0.252      0.447-0.475   6  0.400
  1007.       0.467   0.438 - 0.500   7  0.414      0.475-0.502   7  0.467
  1008.       0.533   0.500 - 0.562   8  0.576      0.502-0.529   8  0.533
  1009.       0.600   0.563 - 0.625   9  0.738      0.529-0.557   9  0.600
  1010.       0.667   0.625 - 0.687  10  0.900      0.557-0.584  10  0.667
  1011.       0.733   0.688 - 0.750  11  0.920      0.584-0.612  11  0.733
  1012.       0.800   0.750 - 0.812  12  0.940      0.612-0.639  12  0.800
  1013.       0.867   0.813 - 0.875  13  0.960      0.639-0.715  13  0.867
  1014.       0.933   0.875 - 0.937  14  0.980      0.715-0.889  14  0.933
  1015.       1.000   0.938 - 1.000  15  1.000      0.889-1.111  15  1.000
  1016.  
  1017. Yellow uses a transfer-array. There is no linear correspondence between
  1018. the color- and the ink-values. This correspondence is defined through the
  1019. given array. In other words: the Transfer-arrays define a nonlinear
  1020. ink-characteristic, what is exactly the same functionality, that
  1021. Postscript's "(color)transfer"-function provides.
  1022.  
  1023. While in the case of Yellow, the intervals match the intervals used with Cyan,
  1024. the intervals used for Black match the Magenta-Intervals, but watch
  1025. the correspondence between the CI/15-values and the Ink-Density for Black:
  1026. This is a linear distribution in the Ink-domain.
  1027.  
  1028. Not a bad idea, I think. Consider the fs2-algorithm: It uses values in
  1029. the range 0-255 (Bytes). If any transfer-array would be supplied alone,
  1030. some of the 256 possible values would never be used and others will be
  1031. used for adjacent intervals several times. Establishing an identical
  1032. coding-array solves this problem, so that the full potential of the
  1033. algorithm is utilized.
  1034.  
  1035. Another useful feature of the coding-arrays is, that they are internally
  1036. normalized to the 0-1 Range. In the 720x720Dpi-Mode the transfer-arrays
  1037. in stcolor.ps limit the Dot-Density to about 50%, thus this arrays end
  1038. at 0.5 (respectively start at 0.5 in the RGB-case). Due to the automatic
  1039. normalization this arrays can be used as coding-arrays too. But of course
  1040. in the fs2-case mentioned above, values from 0-127 will never be delivered
  1041. to the algorithm, while values 128-255 are delivered for adjacent intervals.
  1042.  
  1043. To clearify the intended use of the three parameters/parameter-groups the
  1044. following statements should be kept in mind:
  1045.  
  1046. - ColorAdjustMatrix is never used, when transferring gray-values. This
  1047.   restricts it to what the name says: Adjustment of Colors e.g. the
  1048.   correction for miscolored ink. Do not use it for saturation or
  1049.   brightness-control.
  1050.  
  1051. - ?transfer-arrays control the values delivered to the driver, which in
  1052.   turn controls the ink-quantity. This arrays should be used for control
  1053.   of saturation and brightness. Maybe that a Postscript-Header for the
  1054.   manipulation of brightness and so on will be provided with future
  1055.   versions. In general this arrays are identical for all inks.
  1056.   If they differ they provide a simpler scheme for color-correction,
  1057.   which is not necessarily faster than the ColorAdjustMatrix.
  1058.  
  1059. - ?coding-arrays control the color-value-intervals mapped to
  1060.   the internal color-indices.
  1061.  
  1062. P R I N T - M O D I
  1063. ===================
  1064.  
  1065. The parameters "Unidirectional", "Microweave", "noWeave",
  1066. "OutputCode", "Model" and the given resolution provide control over the
  1067. data generated for the printer.
  1068.  
  1069. Unidirectional
  1070. --------------
  1071. Simply toggles the unidirectional-mode of the printer. Setting "Unidirectional"
  1072. definitely decreases printing-speed, but may increase the quality. I use
  1073. this for printing tranparencies, where fast head-movement could smear the ink.
  1074.  
  1075. Microweave, noWeave and OutputCode=deltarow
  1076. -------------------------------------------
  1077. The first are two Booleans, what immediately tells, that 4 combinations are
  1078. possible. Actually only three exist (if you don't count for deltarow):
  1079.  
  1080.      1. Softweave
  1081.      2. Microweave
  1082.      3. noWeave
  1083.  
  1084. First and second are functionally identical, their difference is that either
  1085. the driver or the printer does the job. So the question
  1086.  
  1087.             What is weaving ?
  1088.  
  1089. arises. The Epson Stylus Color has a Head-Assembly that contains two physically
  1090. identifiable Heads. One for Black and one for Cyan/Magenta/Yellow. This
  1091. makes 4 logical Heads, one for each color-component. Each of this four heads
  1092. has several jets at some Y-distance, so several horizontal lines can be printed
  1093. during one pass of the heads. From the experience I think there are 15 Jets
  1094. per color spaced at 1/90".
  1095.  
  1096. So the question arises, how to print at a Y-Resolution of 360Dpi with this
  1097. 90DpI-Jets. Simply by division, one gets 360/90 = 4, what tells us, that
  1098. 4 Passes of the head-assembly are required to achieve a Y-resolution of
  1099. 360DpI. Weaving is just the scheme how the 15 jets are utilized to print
  1100. adjacent horizontal rows:
  1101.  
  1102.                     Weaving                   noWeave
  1103.     Pass:     1     2     3     4       1     2     3     4
  1104.     0/360"   jet0   -     -     -      jet0   -     -     -
  1105.     1/360"    -    jet1   -     -       -    jet0   -     -
  1106.     2/360"    -     -    jet2   -       -     -    jet0   -
  1107.     3/360"    -     -     -    jet3     -     -     -    jet0
  1108.     4/360"   jet1   -     -     -      jet1   -     -     -
  1109.     5/360"    -    jet2   -     -       -    jet1   -     -
  1110.     6/360"    -     -    jet3   -       -     -    jet1   -
  1111.     ....
  1112.  
  1113. Now let us assume, that the dot-diameter is different for each individual
  1114. jet, but the average among the jets matches the desired resolution. With
  1115. weaving adjacent rows are printed by different jets, thus the some averaging
  1116. takes place. Without weaving adjacent rows are printed by the same jet and
  1117. this makes the dot-diameter-deviations visible as 1/90"-stripes in the printout.
  1118.  
  1119. In Softweave-Mode (the default) the driver sends the data properly arranged to
  1120. the printer, while in Microweave-Mode the printer does the same job. But in
  1121. general the host-processor is much faster than the printers processor and
  1122. thus it is advantageous to let the host do this job. In addition to that, for
  1123. 720DpI 8 Passes are required and the amount of buffer-space required to buffer
  1124. the data for the passes is far beyond the printers memory. Softweave requires
  1125. an odd value of "escp_Band", the Stylus Color provides 15 for that.
  1126.  
  1127. "OutputCode" controls the encoding used. In the basic modi, the choice consists
  1128. of "plain" and "runlength". The computation of runlength-encoded data does not
  1129. take much time, at least less than the data tranfer to the printer, thus this
  1130. is the recommended mode and of course the default. With the Stylus Color
  1131. Epson introduced some new encoding principles, namely "tiff" and "deltarow".
  1132. While the first was omitted from this driver, since there were not potential
  1133. advantages found, "deltarow" is available as an option. "Softweave" cannot
  1134. be used with this encoding, so if "OutputCode=deltarow" is set, Microweave
  1135. becomes the default. Maybe that the size of the ESC/P2-code becomes smaller,
  1136. but I have never observed increased printing-speed - things tend to become
  1137. slower with deltarow compared to Softweave.
  1138.  
  1139. Model
  1140. -----
  1141. Some ESC/P2-Printers, such as the Stylus 800, do not offer Microweave or
  1142. the commands required to do Softweave. Setting Model just changes the defaults
  1143. and omits some parts of the initialization-sequence, which are not compatible
  1144. with the given printer model. Currently only "st800" is supported besides the
  1145. default (stcolor).
  1146.  
  1147.  
  1148. BEWARE: BUGS & PITFALLS
  1149. =======================
  1150.  
  1151. * The given ?coding and ?transfer arrays should be strictly monotonic.
  1152.  
  1153. * It is impossible to change WHITE: that's your paper.
  1154.   Thus R/G/B-transfer should end at 1.0 and C/M/Y/K-transfer should
  1155.   start at 0.0.
  1156.  
  1157. * Usually 8Bits per component yields fastest operation.
  1158.  
  1159. * The ColorAdjustMatrix is not used in the reverse-transformation, which
  1160.   is used, when Ghostscript does the dithering (gs*-Modi). Expect funny
  1161.   results.
  1162.  
  1163. * If BitsPerPixel is less than 6, the entire coding/transfer-process
  1164.   does not work. This is always true for the gs*-modi and becomes true
  1165.   for the other modi, if BitsPerPixel is forced to low values.
  1166.  
  1167. * 720x720Dpi-Printing should never select the gs-modi and should always
  1168.   use stcolor.ps. (I prefer 360x720)
  1169.  
  1170. T E S T S (version 1.13 and above)
  1171. ==================================
  1172.  
  1173. This section should give an overview over the performance in terms of
  1174. processing- & printing-time. Printing is done offline (via cp-instruction)
  1175. to measure real printing-speed, since at high-resolutions processing-time
  1176. is in the same order of magnitude and thus may become the limiting factor.
  1177.  
  1178. The various OutputCodes
  1179. -----------------------
  1180.  
  1181. I ran several files though ghostscript and recorded the size of the code,
  1182. the processing time and the printing-time, at least for some of the files.
  1183. Always the following options were used:
  1184.  
  1185.       "-sDEVICE=stcolor -sPAPERSIZE=a4 stcolor.ps - < file.ps"
  1186.  
  1187. (Actually "-sPAPERSIZE=a4" is in my gs_init.ps since I'm a germ.)
  1188.  
  1189. "Softweave" means actually, that nothing else was used, it is the default and
  1190. implies that odd v=40/h=10/m=15 mode (ESC . 1 40 10 15).
  1191.  
  1192. "Microweave" is just "-dMicroweave", which is equivalent to "ESC . 1 10 10 1",
  1193. with full skip-optimization and microweave-activated.
  1194.  
  1195. "deltarow" is the new encoding principle ("ESC . 3 10 10 1") with Microweave on.
  1196. It is activated with "-sOutputCode=deltarow".
  1197.  
  1198. Finally I wanted to see the plain Kathy Ireland and used "-sOutputCode=plain",
  1199. which is just replacing RLE by no encoding, thus "ESC . 0 40 10 15" is
  1200. used then.
  1201. [So sorry ;-)  Kathy was still blue dressed in front of the blue sea on a blue
  1202. air-cushion - nice to see but hard to dither]
  1203.  
  1204. So here are the results:
  1205.  
  1206.               golfer.ps    colorcir.ps      drawing.ps        brief.ps
  1207.  
  1208. deltarow   572751/48.180u 643374/41.690u  90142/46.180u/1:50 178563/49.350u/2:22
  1209. Softweave  559593/46.810u 669966/44.960u 296168/48.160u/1:30 269808/43.320u/1:55
  1210. Microweave 590999/56.060u 754276/42.890u 338885/47.060u/1:50 282314/44.690u/2:22
  1211.  
  1212.                kathy.ps
  1213. deltarow   3975334/111.940u/5:35
  1214. Softweave  3897112/101.940u/3:10
  1215. Microweave 4062829/100.990u/3:15
  1216. plain/soft 5072255/104.390u/3:05
  1217.  
  1218. Evaluation:
  1219.  
  1220. A.) Might be, that I've not chosen the optimal deltarow-code, but even if
  1221.     it saves at lot of bytes, printing-speed is not increased.
  1222.  
  1223. B.) At least the printer prefers plain-kathy. In other words: Sending a
  1224.     1 Megabyte or 20% more data, has no impact on printing speed.
  1225.     [drawing.ps is an exception to this rule: plain prints slower than rle]
  1226.  
  1227. C.) But "unclever" coding -especially with deltarow- can significantly
  1228.     slows down printing. But even if very significant advantages in the
  1229.     size of the code ar achieved, "deltarow" is not competitive.
  1230.     [colorcir.ps shows savings in deltarow, but printing is a mess.]
  1231.  
  1232.  
  1233. Printing-Time related to other options
  1234. --------------------------------------
  1235.  
  1236. Full page halftone images printed, unless otherwise noted.
  1237.  
  1238.   DpI      print-mode    Size   Time comments
  1239. 180x180 mono      -/uni  358KB  1:15
  1240.                   -/bi   358KB  0:45
  1241.               micro/bi   205KB  0:45 (not weaving)
  1242.                soft/bi   179KB  1:25
  1243.         color     -/bi   641KB  2:45
  1244.                soft/bi   556KB  1:32
  1245.  
  1246. 360x360 mono      -/uni  269KB  0:50 (b/w Text)
  1247.                   -/bi   269KB  0:35 (b/w Text)
  1248.               micro/bi   269KB  2:25 (b/w Text)
  1249.                soft/uni  250KB  3:15 (b/w Text)
  1250.                soft/bi   250KB  1:55 (b/w Text)
  1251.         color     -/bi   346KB  1:00 (sparse color-page, visible displacements)
  1252.               micro/bi   346KB  1:50 (sparse color-page, looks buggy - printer?)
  1253.                soft/bi   294KB  1:30 (sparse color-page, O.K.)
  1254.                   -/bi  2218KB  2:45 (visible stripes)
  1255.               micro/bi  5171KB  3:17
  1256.                soft/bi  3675KB  3:05
  1257.  
  1258. 360x720 mono   soft/bi  2761KB  5:40
  1259.         color  soft/bi  7789KB  6:15 (just a small difference!)
  1260.  
  1261. 720x360 color  soft/bi  7182KB  5:40
  1262.  
  1263. 720x720 color micro/bi 14748KB 30:26 (actually beyond printers capabilities)
  1264.                soft/bi 14407KB 11:08
  1265. ### ------------------------------ End --------------------------------- ###
  1266.  
  1267. ### ------------ uniprint - an unified (?)  printer driver ------------- ###
  1268.  
  1269. uniprint -- ESC/P, ESC/P2 and PCL/RTL-Driver by Gunther Hess gunther@elmos.de
  1270. =============================================================================
  1271.  
  1272. This driver is intended to _become_ a unified printer driver. If you
  1273. consider it ugly, please send me your suggestions for improvements. The
  1274. driver will be updated with them. Thus the full explanation of the drivers
  1275. name is:
  1276.  
  1277.             Ugly- -> Updated- -> Unified-Printer-Driver
  1278.  
  1279. But probably you want to know, something about the functionality:
  1280. At the time of this writing uniprint drives:
  1281.  
  1282.   NEC Pinwriter P2X (24Pin B/W Impact printer, ESC/P-Style)
  1283.   Several Epson Stylus Color Models (ESC/P2-Style)
  1284.   HP-Deskjet 550c (Basic HP-RTL)
  1285.   Canon BJC 610
  1286.  
  1287. It can be configured for various other printers _without_ recompilation
  1288. and offers uncompressed (== ugly) SUN-Rasterfiles as another format, but
  1289. this format is intended for testing purposes rather than real use.
  1290.  
  1291. The usage of this driver is quite simple, the typical command line looks
  1292. like this:
  1293.  
  1294.    gs @MODEL.upp -sOutputFile=PRINT_FILE POSTSCRIPT_FILE -c quit
  1295.  
  1296. with MODEL, PRINT_FILE and POSTSCRIPT_FILE replaced by actual filenames
  1297. as in the following example from my Linux-Box:
  1298.  
  1299.       gs @stc.upp -sOutputFile=/dev/lp1 tiger.ps -c quit
  1300.  
  1301. There are several Unified-Printer-Parameterfiles (.upp) distributed
  1302. with Ghostscript:
  1303.  
  1304.   bjc610a0 - Canon BJC 610, 360x360DpI, plain paper high speed, color, rendered
  1305.   bjc610a1 - Canon BJC 610, 360x360DpI, plain paper, color, rendered
  1306.   bjc610a2 - Canon BJC 610, 360x360DpI, coated paper, color, rendered
  1307.   bjc610a3 - Canon BJC 610, 360x360DpI, transparency film, color, rendered
  1308.   bjc610a4 - Canon BJC 610, 360x360DpI, back print film, color, rendered
  1309.   bjc610a5 - Canon BJC 610, 360x360DpI, fabric sheet, color, rendered
  1310.   bjc610a6 - Canon BJC 610, 360x360DpI, glossy paper, color, rendered
  1311.   bjc610a7 - Canon BJC 610, 360x360DpI, high gloss film, color, rendered
  1312.   bjc610a8 - Canon BJC 610, 360x360DpI, high resolution paper, color, rendered
  1313.  
  1314.   bjc610b1 - Canon BJC 610, 720x720DpI, plain paper, color, rendered
  1315.   bjc610b2 - Canon BJC 610, 720x720DpI, coated paper, color, rendered
  1316.   bjc610b3 - Canon BJC 610, 720x720DpI, transparency film, color, rendered
  1317.   bjc610b4 - Canon BJC 610, 720x720DpI, back print film, color, rendered
  1318.   bjc610b6 - Canon BJC 610, 720x720DpI, glossy paper, color, rendered
  1319.   bjc610b8 - Canon BJC 610, 720x720DpI, high resolution paper, color, rendered
  1320.  
  1321.   cdj550   - HP Deskjet 550C, 300DpI, 32Bit-CMYK
  1322.  
  1323.   necp2x   - NEC P2X at 360x360DpI, 8Bit (Floyd-Steinberg)
  1324.  
  1325.   stcany   - Any Epson Stylus Color, 360x360DpI, 4Bit, POSTSCRIPT-Halftoning
  1326.  
  1327.            The next group is suitable for Original Stylus & Stylus Pro.
  1328.   stc      - Epson Stylus Color, 360x360DpI, 32Bit-CMYK, 15 Pin
  1329.   stc_l    - ditto, but 360x360DpI, 4Bit, POSTSCRIPT-Halftoning, Weaved noWeave
  1330.   stc_h    - ditto, but 720x720DpI, 32Bit-CMYK, 15 Pin Weave
  1331.  
  1332.   stc2     - Epson Stylus Color II(s), 360x360DpI, 32Bit-CMYK, 20Pin
  1333.   stc2_h   - Epson Stylus Color II,    720x720DpI, 32Bit-CMYK, 20Pin
  1334.   stc2s_h  - Epson Stylus Color IIs,   720x720DpI, 32Bit-CMYK, 20Pin
  1335.  
  1336.            Thanks to Mark Goldberg, the following two are known to have
  1337.            good transfer-curves for plain-paper.
  1338.   stc500p  - Espon Stylus Color 500, 360DpI, 32Bit-CMYK, noWeave, plain paper
  1339.   stc500ph - ditto, 720x720DpI, 32Bit-CMYK, noWeave, plain paper
  1340.  
  1341.            The Stylus Color 600 does 32/90"-Weaving
  1342.   stc600pl - Epson Stylus Color 800, 360DpI, 32Bit-CMYK, 32 Pin, plain paper
  1343.   stc600p  - Epson Stylus Color 800, 720DpI, 32Bit-CMYK, 32 Pin, plain paper 
  1344.   stc600ih - Epson Stylus Color 800, 1440DpI 32Bit-CMYK, 30 Pin, inkjet paper 
  1345.  
  1346.            The Stylus Color 800 does 64/180"-Weaving
  1347.   stc800pl - Epson Stylus Color 800, 360DpI, 32Bit-CMYK, 64 Pin, plain paper
  1348.   stc800p  - Epson Stylus Color 800, 720DpI, 32Bit-CMYK, 64 Pin, plain paper 
  1349.   stc800ih - Epson Stylus Color 800, 1440DpI 32Bit-CMYK, 62 Pin, inkjet paper 
  1350.  
  1351.   ras1     - SUN rasterfile,        1Bit, monochrome (Ghostscript)
  1352.   ras8m    - SUN rasterfile,        8Bit, grayscale  (Floyd-Steinberg)
  1353.  
  1354.   ras3     - SUN rasterfile,        3Bit, RGB        (Ghostscript)
  1355.   ras24    - SUN rasterfile,       24Bit, RGB        (Floyd-Steinberg)
  1356.  
  1357.   ras4     - SUN rasterfile,        4Bit, CMYK       (Ghostscript)
  1358.   ras32    - SUN rasterfile,       32Bit, CMYK       (CMYK-Floyd-Steinberg)
  1359.  
  1360. There may be more parameter files available. I am trying to keep them together
  1361. with the latest version of the driver-sources and some additional stuff at:
  1362.  
  1363.    http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html
  1364.  
  1365. At the time of this writing (21-Sep-1997) the contents of the website is 
  1366. outdated, but i still live in the hope to update it. I am becoming 42 in
  1367. November, Thus all answers might be available on the web then.
  1368.  
  1369. Please note the following:
  1370.  
  1371.    - Changing the resolution via the -r-Parameter of Ghostscript is
  1372.      usually _not_ possible.
  1373.  
  1374.    - For Epson Stylus Color Models not listed above, the two stc500-Variants
  1375.      are likely to work besides stcany, but the Gamma-Correction might be wrong.
  1376.  
  1377. A few notes on the state of this driver
  1378. =======================================
  1379.  
  1380. The coding of uniprint was triggered by the requirements of the various
  1381. Stylus Color models and some personal needs for HP- and NEC-Drivers. Thus
  1382. the Epson-Models are well represented among the distributed Parameter-Files.
  1383. When this driver entered the beta testphase, three other drivers appreared on
  1384. the scene, that could/should at least partially integrated into uniprint:
  1385.  
  1386.     cdj850 by Uli Wortmann       (available via ftp://bonk.ethz.ch)
  1387.     hpdj      by Martin Lottermoser
  1388.     bjc610    by Helmut Riegler
  1389.  
  1390. Uli addresses features of the more recent Deskjet-Models, that will not be 
  1391. available in uniprint soon. Martin taught me a lesson on HP-PCL3-Headers,
  1392. that will be available in uniprint soon. Helmut in turn followed an almost
  1393. similar idea, but targetted primarily for printing on Canon-Printers from
  1394. the pbmplus-Library. Starting with Version 1.68 of uniprint, the bjc-support
  1395. is available. The work on the hpdj-Integration will start after the update of
  1396. my website.
  1397.  
  1398. A few notes on the uniprint-background
  1399. ======================================
  1400.  
  1401. Uniprint is actually an update of stcolor, but much more versatile than
  1402. its predecessor. Stcolor in turn started as a clone of the Color-Deskjet
  1403. family of drivers (cdj*). Finally cdj* can be considered as an addition
  1404. of features to the simpler Monochrome-Drivers of Ghostscript. This
  1405. addition of features is useful to get an idea of the functionality of
  1406. uniprint:
  1407.  
  1408. 1.   Monochrome -> advanced Color (cdj*):
  1409.      This adds color-mapping and rendering-functions to the driver.
  1410.      Especially the Error-Diffusion is important for the printout quality.
  1411.  
  1412. 2.1. HP-Color -> Epson-Color (stcolor)
  1413.      The Epson Stylus Color offered two features simultaneously: It could
  1414.      produce 720x720Dpi-Output and it could soak the paper. In other words
  1415.      it required more color-management-features inside the driver. This is
  1416.      still the major conceptual difference in the data-generation
  1417.      for HP- and Epson-Printers.
  1418.  
  1419. 2.2. Weaving-Techniques      (stcolor)
  1420.      Besides the internal color-management the Stylus Color did not provide
  1421.      enough buffer-space to operate the printer fast at the 720x720DpI.
  1422.      The use of Weaving could yield the triple print-speed. Weaving, also
  1423.      called interleaving, is present in some monochrome-drivers too. The new
  1424.      thing in stcolor was the combination with Error-Diffusion. Unfortunately
  1425.      the weaving was somehow hardcoded, as the problems with the newer 
  1426.      members of the Stylus Color family of printers demonstrated.
  1427.  
  1428. 3.   Generalized Output-Format and Weaving (uniprint)
  1429.      The features mentioned above yielded about 90% of stolors source-code,
  1430.      only 10% were related to the formatting of the output. The idea to
  1431.      make the Output-Format switchable came up soon after completing
  1432.      stcolor. But the final design of uniprint became triggered by the
  1433.      (personal) necessity to drive a NEC-P2X and a Designjet 750c. (If
  1434.      you are missing the dnj750-parameter-file: a temporary version will
  1435.      be available soon, but a reasonable one requires some additions to
  1436.      uniprint, which will take some time.)
  1437.  
  1438. Thus uniprint accumulates almost any features, that can be found among
  1439. the printer drivers. Clearly this has some disadvantages in terms of
  1440. processing speed. This is still true for the current version (1.75),
  1441. since it is targetted for the functionality and several speed-gaining
  1442. features were (willingly) omitted.
  1443.  
  1444. To summarize and to introduce the terms used in the description of the
  1445. Parameters, the features of uniprint, that can be parameterized are:
  1446.  
  1447.  1. The Color-Mapping
  1448.  2. The Color-Renderining (alias Error-Diffusion or Floyd-Steinberg)
  1449.  3. The Output-Format, including
  1450.  4. The Weaving
  1451.  
  1452. And the Parameters used for that are:
  1453.  
  1454. upAbortCommand                upAdjustBottomMarginCommand
  1455. upAdjustMediaSizeCommand      upAdjustPageLengthCommand
  1456. upAdjustPageWidthCommand      upAdjustTopMarginCommand
  1457. upAdjustResolutionCommand     upBeginJobCommand
  1458. upBeginPageCommand            upBlackTransfer
  1459. upBlueTransfer                upColorInfo
  1460. upColorModel                  upColorModelInitialized
  1461. upComponentBits               upComponentShift
  1462. upCyanTransfer                upEndJobCommand
  1463. upEndPageCommand              upErrorDetected
  1464. upFSFixedDirection            upFSProcessWhiteSpace
  1465. upFSReverseDirection          upFSZeroInit
  1466. upFormatXabsolute             upFormatYabsolute
  1467. upGreenTransfer               upMagentaTransfer
  1468. upMargins                     upModel
  1469. upOutputAborted               upOutputBuffers
  1470. upOutputComponentOrder        upOutputComponents
  1471. upOutputFormat                upOutputFormatInitialized
  1472. upOutputHeight                upOutputPins
  1473. upOutputWidth                 upOutputXOffset
  1474. upOutputXStep                 upOutputYOffset
  1475. upOutputYStep                 upRasterBufferInitialized
  1476. upRedTransfer                 upRendering
  1477. upRenderingInitialized        upSelectComponentCommands
  1478. upSetLineFeedCommand          upVersion
  1479. upWeaveFinalPins              upWeaveFinalScan
  1480. upWeaveFinalXStarts           upWeaveFinalYFeeds
  1481. upWeaveInitialPins            upWeaveInitialScan
  1482. upWeaveInitialXStarts         upWeaveInitialYFeeds
  1483. upWeavePasses                 upWeaveXPasses
  1484. upWeaveXStarts                upWeaveYFeeds
  1485. upWeaveYOffset                upWeaveYPasses
  1486. upWhiteTransfer               upWriteComponentCommands
  1487. upWroteData                   upXMoveCommand
  1488. upXStepCommand                upYFlip 
  1489. upYMoveCommand                upYStepCommand
  1490. upYellowTransfer
  1491.  
  1492. All this Parameters are specific to uniprint. But since the names are
  1493. choosen to be self-explanatory, you can now go ahead and write your 
  1494. own parameterfile ;-).
  1495.  
  1496. Godzillas Guide to the Creation of Unified-Printer-Parameterfiles
  1497. =================================================================
  1498.  
  1499. Learning by example might be a good idea, thus here is one of the
  1500. distributed parameter files (stc_l.upp) with some added "--"-Comments:
  1501.  
  1502.  -supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, noWeave"
  1503.  -sDEVICE=uniprint                    -- Select the Driver
  1504.  -dNOPAUSE                            -- Useful with Printers
  1505.  -dSAFER                              -- Provides some Security
  1506.  -dupColorModel=/DeviceCMYK           -- Selects the Color-Mapping
  1507.  -dupRendering=/ErrorDiffusion        -- Selects the Color-Rendering
  1508.  -dupOutputFormat=/EscP2              -- Selects the Output-Format
  1509.  -r360x360                            -- Adjusts the Resolution
  1510.  -dupMargins="{ 9.0 39.96 9.0 9.0}"   -- Establishes (L/B/R/T-Margins 1/72")
  1511.  -dupComponentBits="{1 1 1 1}"        -- Map: Bit's Per Component (Default: 8)
  1512.  -dupWeaveYPasses=4                   -- Weave: Y-Passes (Default: 1)
  1513.  -dupOutputPins=15                    -- Format/Weave: Scans per Command
  1514.  -dupBeginPageCommand="<              -- Goes to the Printer (second-data)
  1515.    1b40   1b40                        -- ESC '@' ESC '@'    -> dual reset
  1516.    1b2847 0100 01                     -- ESC '(' 'G' 1 0 1  -> Graphics
  1517.    1b2869 0100 00                     -- ESC '(' 'i' 1 0 1  -> no HW-Weave
  1518.    1b2855 0100 0A                     -- ESC '(' 'U' 1 0 10 -> 360DpI
  1519.    1b5500                             -- ESC 'U'  0         -> Bidir-Print
  1520.    1b2843 0200 0000                   -- ESC '(' 'C' 2 0 xx -> Page-Length
  1521.    1b2863 0400 0000 0000              -- ESC '(' 'c' 4 0 xxxx -> Margins
  1522.  >"                                   -- as it is, unless:
  1523.  -dupAdjustPageLengthCommand          -- Adjust Pagelength in BOP requested
  1524.  -dupAdjustTopMarginCommand           -- Adjust Top-Margin in BOP
  1525.  -dupAdjustBottomMarginCommand        -- Adjust Bottom-Margin in BOP
  1526.  -dupEndPageCommand="(\033@\014)"     -- Last (but one) data to the Printer
  1527.  -dupAbortCommand="(\033@\15\12\12\12\12    Printout-Aborted\15\014)"
  1528.  
  1529. That's short, and if one removes the "upWeaveYPasses" and "upOutputPins"
  1530. this becomes shorter and almost "stcany.upp". This miniature-size
  1531. is the result of the fact, that I am most familiar with ESC/P2 and was able
  1532. to add defaults for the omitted parameters.
  1533.  
  1534. Just a few notes about the parameters used in this example:
  1535.  
  1536. - upModel, is a string serving as a comment (and nothing else)
  1537.  
  1538. - DEVICE, NOPAUSE, SAFER are well known Ghostscript-Parameters
  1539.  
  1540. - upColorModel, is one of major uniprint-Parameters and selects the
  1541.   color-mapping and in turn the Postscript-ColorModel. The following
  1542.   values are currently supported:
  1543.  
  1544.   /DeviceGray,  /DeviceRGBW, /DeviceRGB, /DeviceCMYK, /DeviceCMYKgenerate
  1545.  
  1546. - upRendering, is the next major uniprint-Parameter and selects the
  1547.   (Color-) Rendering.  The following values are currently supported:
  1548.  
  1549.   /ErrorDiffusion, /FSCMYK32
  1550.  
  1551.   The first is similar to fsmono, fsrgb and fsx4 of stcolor, while the 
  1552.   second is (almost) identical to fscmyk/hscmyk, but is restricted to
  1553.   32Bit-Data and should be used in conjunction with /DeviceCMYKgenerate.
  1554.  
  1555. - upOutputFormat, is the final major uniprint-Parameter and selects the
  1556.   Output-Method. The following values are currently supported:
  1557.  
  1558.   /SunRaster, /Epson, /EscP2, /EscP2XY, /Pcl
  1559.  
  1560.   /SunRaster creates the Raster-Files and requires no other Parameters.
  1561.   /Epson     is used for the elderly ESC/P-Format (used by many printers)
  1562.   /EscP2     is used by more recent Epson-printers (no X-Weaving supported)
  1563.   /EscP2XY   supports X-Weaving, used with 1440DpI-Printers and in stc2s_h
  1564.   /Pcl       is the HP-PCL/RTL-Style output-formatter without weaving.
  1565.  
  1566. - -r360x360  is the Standard Resolution-Parameter of Ghostscript 
  1567.  
  1568. - upMargins="{ 9.0 39.96 9.0 9.0}
  1569.   Has a similar function as the normal Ghostscript-Parameter ".HWMargins",
  1570.   it sets the Left/Bottom/Right/Top-Margins in 1/72" units. Uniprint 
  1571.   provides this parameter to enable automatic L<>R exchange, if upYFlip
  1572.   is active.
  1573.  
  1574. - upComponentBits, is an array of integers, that selects the Bits stored
  1575.   in Raster-Memory. The Default is to store 8 Bits per component. In this
  1576.   example 1 Bit is selected for each component, thus turning down the
  1577.   Floyd-Steinberg-Algorithm (But the time consuming computation is
  1578.   still carried out, but this will change in future Versions). There is
  1579.   a related Parameter "upComponentShift", which offers control over the
  1580.   positioning of the components within the raster-memory. Each of the 
  1581.   given numbers corresponds to a component, and which depends on the
  1582.   selected "upColorModel":
  1583.  
  1584.      /DeviceGray  /DeviceRGBW /DeviceRGB /DeviceCMYK, /DeviceCMYKgenerate
  1585.   0    White         White       Red       Black         Black
  1586.   1      -            Red       Green       Cyan          Cyan
  1587.   2      -           Green       Blue      Magenta       Magenta
  1588.   3      -            Blue         -       Yellow        Yellow
  1589.  
  1590.    This order may not be suitable for some printers, thus there is
  1591.    another Parameter to select the Output-Order. This is an array
  1592.    of integers too, is named "upOutputComponentOrder" and uses the
  1593.    numbers on the left.
  1594.  
  1595. One group of very important Parameters, not used in the example above
  1596. deserves to be mentioned here: The Transfer-Arrays, named 
  1597.  
  1598.                     "up<color>Transfer"
  1599.  
  1600. where <color> is one of the names in the table above. These are arrays
  1601. of floats in the range from 0.0 to 1.0 and represent the colortransfer
  1602. functions. They are used during mapping _and_ rendering. In the simplest
  1603. case, this arrays ensure an equidistant distribution of the stored 
  1604. values within the device-space (Which means a non-linear mapping
  1605. from Ghostscript's point of view). If the given array does not cover 
  1606. the entire range from 0 to 1, which applies for the Stylus Color Family
  1607. at high resolution for some media, only the relevant part gets mapped to
  1608. the raster-memory (thus it is fully utilized) and the rendering takes
  1609. care of the "overhang" (In this case the Post-Diffusion of 1 Bit components
  1610. makes sense).
  1611.  
  1612. Finally an important note on the Transfer-Arrays: In the case of monochrome
  1613. devices, the stored Component is White, which is the way Postscript defines
  1614. this devices, but most printers require "Black", thus one has to provide
  1615. a falling "upWhiteTransfer" for such printers.
  1616.  
  1617. - upWeaveYPasses, is an integer, that gives the number of printhead passes
  1618.   required to achieve the requested Y-DpI. This makes sense only if
  1619.  
  1620. - upOutputPins ist set to something greater than 1, thus multiple Pins/Nozzles
  1621.   are transferred with a single command and of course such a command must
  1622.   be supported by the device.
  1623.  
  1624. If no other Weave-Parameters are given, uniprint computes several defaults,
  1625. which altogether do no weaving. The /Epson and /EscP2XY-Formats take care
  1626. of "upWeaveXPasses" too.
  1627.  
  1628. - upBeginPageCommand, represents the data transferred to the printer,
  1629.   whenever a new Page begins. Prior to that, the "upBeginJobCommand"
  1630.   is written to the device only once per OutputFile. (Intended for the
  1631.   HP-PJL-Sequences).
  1632.  
  1633. - upAdjustBottomMarginCommand, upAdjustMediaSize, upAdjustPageLengthCommand,
  1634.   upAdjustPageWidthCommand, upAdjustResolutionCommand, 
  1635.   upAdjustTopMarginCommand
  1636.   Normally uniprint does not change the "upBeginPageCommand" nor does it
  1637.   provide a default. But if the above boolean values are set, the corresponding
  1638.   values are changed. (Provided that the code of the formatters supports
  1639.   this change and the commands to be adjusted are included in the
  1640.   BOP-String)
  1641.  
  1642. - upEndPageCommand is the fixed termination sequence for each page and
  1643.   of course there is a "upEndJobCommand" too.
  1644.  
  1645. - "upAbortCommand" is written, if the interrupt-detection in uniprint
  1646.   is enabled and a signal is caught. It _replaces_ the "upEndPageCommand"
  1647.   _and_ the "upEndJobCommand", thus allowing the indication of an
  1648.   aborted job. (Ghostscript gets an error-return from uniprint in this
  1649.   case and abandons further processing.)
  1650.  
  1651. For the ESC/P(2) formats all commands represent binary data, while for
  1652. the PCL/RTL-Formatter some of them are formats for fprintf. This strings
  1653. _must_ have explicitly a trailing '\0'.
  1654.  
  1655. I should write more, but time is short and the only recommendation is to 
  1656. take a look at the various parameter-files. But at least three more hints
  1657. should be given:
  1658.  
  1659.   1. If the Driver rejects a Configuration, nothing happens until a
  1660.      showpage occurs. Then an error is raised and a message with
  1661.      "CALL-REJECTED upd_print_page..." is printed on stderr.
  1662.  
  1663.   2. uniprint has lots of messages that can be activated by setting bits
  1664.      in the preprocessor macro UPD_MESSAGES. I usually use the compile-
  1665.      time option -DUPD_MESSAGES=0x17 for Configuration-Development. 
  1666.      (For the semantics, check the UPD_M_... macros in the source.)
  1667.  
  1668.   3. There is a file "uninfo.ps" distributed. This file prints (on 
  1669.      the terminal, not on the printer) the contents of the 
  1670.      current-pagedevice-dictionary in alphabetical order. This includes
  1671.      the parameters generated/changed by uniprint.
  1672.  
  1673. Quick comments on all Parameters in alphabetical order
  1674. ======================================================
  1675. String    upAbortCommand              - End of Page & File upon Interrupt
  1676. Bool      upAdjustBottomMarginCommand - Manipulate B-Marg in upBeginPageCommand
  1677. Bool      upAdjustMediaSize           - Manipulate Mediasize [intended]         
  1678. Bool      upAdjustPageLengthCommand   - Manipulate P-Lngth in upBeginPageCommand
  1679. Bool      upAdjustPageWidthCommand    - Manipulate P-Wdth in upBeginPageCommand
  1680. Bool      upAdjustResolutionCommand   - Manipulate Resolution
  1681. Bool      upAdjustTopMarginCommand    - Manipulate T-Marg in upBeginPageCommand
  1682. String    upBeginJobCommand           - Begin of each OutputFile
  1683. String    upBeginPageCommand          - Begin of each Page
  1684. Float[]   upBlackTransfer             - Black-Transfer (CMKY* only!)
  1685. Float[]   upBlueTransfer              - Blue-Transfer
  1686. Int[]     upColorInfo                 - struct gx_device_color_info
  1687. Name      upColorModel                - Selects Color-Mapping
  1688. Bool/RO   upColorModelInitialized     - Color-Mapping O.K. (readonly)
  1689. Int[]     upComponentBits             - Bits stored per Component
  1690. Int[]     upComponentShift            - Positioning within gx_color_index
  1691. Float[]   upCyanTransfer              - Cyan-Transfer
  1692. String    upEndJobCommand             - End of each File unless upAbortCommand
  1693. String    upEndPageCommand            - End of each Page unless upAbortCommand
  1694. Bool/RO   upErrorDetected             - Severe (VM) Error, not fully operational
  1695. Bool      upFSFixedDirection          - Inhbits Direction-Toggling in Rendering
  1696. Bool      upFSProcessWhiteSpace       - Causes White-Space Rendering
  1697. Bool      upFSReverseDirection        - Run Rendering in Reverse (if fixed)
  1698. Bool      upFSZeroInit                - Non-Random Rendering-Initialization
  1699. Bool      upFormatXabsolute           - Write absolute X-Coordinates
  1700. Bool      upFormatYabsolute           - Write absolute Y-Coordinates
  1701. Float[]   upGreenTransfer             - Green-Transfer
  1702. Float[]   upMagentaTransfer           - Magenta-Transfer
  1703. Float[]   upMargins                   - L/B/R/T-Margins in 1/72"
  1704. String    upModel                     - Comment-String, holds some info
  1705. Bool/RO   upOutputAborted             - Caught an Interrupt
  1706. Int       upOutputBuffers             - # of Rendering buffers (2^n) 
  1707. Int[]     upOutputComponentOrder      - Order of Comps when Printing
  1708. Int       upOutputComponents          - # written Comps, not fully operational
  1709. Name      upOutputFormat              - Selects Output-Format
  1710. Bool/RO   upOutputFormatInitialized   - Format-Data o.k. (readonly)
  1711. Int       upOutputHeight              - Output-Height in Pixels
  1712. Int       upOutputPins                - # Pins/Nozzles per command
  1713. Int       upOutputWidth               - Output Width in Pixels
  1714. Int       upOutputXOffset             - Offset in Pixels, if upFormatXabsolute
  1715. Int       upOutputXStep               - Divisor / Multiplier for X-Coords
  1716. Int       upOutputYOffset             - Offset in Pixels, if upFormatYabsolute
  1717. Int       upOutputYStep               - Divisor / Multiplier for Y-Coords 
  1718. Bool/RO   upRasterBufferInitialized   - GS-Buffer o.k. (readonly)
  1719. Float[]   upRedTransfer               - Red-Transfer
  1720. Name      upRendering                 - Selects Rendering Algorithm
  1721. Bool/RO   upRenderingInitialized      - Rendering-Parameters o.k. (readonly)
  1722. String[]  upSelectComponentCommands   - Establishes Color (Output-Order!)
  1723. String    upSetLineFeedCommand        - Adjust Linefeed (/Epson only)
  1724. String/RO upVersion                   - Source code Version (readonly)
  1725. Int[]     upWeaveFinalPins            - # of Bottom pins on EOP-Passes
  1726. Int       upWeaveFinalScan            - Begin of EOP-Passes (Y-coord)
  1727. Int[]     upWeaveFinalXStarts         - X-Pass indices for EOP-Passes
  1728. Int[]     upWeaveFinalYFeeds          - Y-Increments for EOP-Passes
  1729. Int[]     upWeaveInitialPins          - # of Top pins on BOP-Passes
  1730. Int       upWeaveInitialScan          - End of BOP-Passes (Y-Coord)
  1731. Int[]     upWeaveInitialXStarts       - X-Pass indices for BOP-Passes
  1732. int[]     upWeaveInitialYFeeds        - Y-Increments for BOP-Passes
  1733. Int       upWeavePasses               - XPasses * YPasses
  1734. Int       upWeaveXPasses              - Number of X-Passes 
  1735. Int[]     upWeaveXStarts              - X-Pass indices for normal Passes
  1736. Int[]     upWeaveYFeeds               - Y-Increments for normal Passes
  1737. Int       upWeaveYOffset              - # of blank/incomplete scans at BOP
  1738. Int       upWeaveYPasses              - Number of X-Passes
  1739. Float[]   upWhiteTransfer             - White Transfer (Monochrome Devices!)
  1740. String[]  upWriteComponentCommands    - Commands to write each component
  1741. Bool/RO   upWroteData                 - Something (BeginJob) written to Output
  1742. String    upXMoveCommand              - X-Positioning-command
  1743. String    upXStepCommand              - Single Step to the right
  1744. Bool      upYFlip                     - Flips Output along the Y-Axis
  1745. String    upYMoveCommand              - Y-Positioning-Command
  1746. String    upYStepCommand              - Single Step down
  1747. Float[]   upYellowTransfer            - Yellow Transfer
  1748.  
  1749. Uniprint's Roll of Honor
  1750. ========================
  1751.  
  1752. I should mention all of the people, who were involved in stcolors
  1753. evolution, but I've decided to start from scratch here:
  1754.  
  1755. John P. Beale      - for testing the stc600-modi
  1756. Bill Davidson      - who triggered some weaving-research (and tested stc2s_h)
  1757. L. Peter Deutsch   - who triggered an ease of configuration
  1758. Mark Goldberg      - who prepared the stc500-Transfers
  1759. Scott F. Johnston   and
  1760. Scott J. Kramer    - for testing the stc800-modi
  1761. Martin Lottermoser - for his great commented hpdj-driver 
  1762. Helmut Riegler     - for the BJC-Extension
  1763. Hans-Gerd Straeter - for some measured transfer-curves and more
  1764. Uli Wortmann       - for discussions and his cdj850-driver
  1765.  
  1766. my family          - for tolerating my printer-driver-hacking,
  1767.  
  1768. Duisburg 21-Sep-1997, Gunther Hess
  1769.  
  1770. Gunther Hess                  phone: ++49 203 376273 (MET-evening hours)
  1771. Richard Wagner Strasse 112    E-Mail:  gunther@elmos.de
  1772. D-47057 Duisburg
  1773. Germany
  1774.  
  1775. ### ------------------------------ End --------------------------------- ###
  1776.  
  1777. ### -- The BJC-600/BJC-4000/BJC-70/Stylewriter 2x00, BJC-800 printers -- ###
  1778.  
  1779. This section was written by Yves Arrouye <Yves.Arrouye@marin.fdn.fr>.
  1780.  
  1781.  
  1782. HISTORY
  1783. -------
  1784.  
  1785. The BJC-600 driver was written in the first place by Yoshio Kuniyoshi
  1786. <yoshio@nak.math.keio.ac.jp> and later modified by me, Yves Arrouye
  1787. <Yves.Arrouye@marin.fdn.fr>. We both tried to make it evolve synchronously,
  1788. though Yoshio cannot be reached since a long time.
  1789.  
  1790. The drivers are based on code for the HP printers by George Cameron
  1791. <g.cameron@biomed.abdn.ac.uk> (in fact, they are in the same file!),
  1792. so he's the first person to thank!
  1793.  
  1794. The 2.00 version of the drivers was a complete rewrite of the driver
  1795. (arguments, optimization, colour handling, in short: everything!) by
  1796. Yves Arrouye. The 2.x release is also the first one to be able to
  1797. use the full width of an A3 paper size...
  1798.  
  1799. With the 2.15 release, PostScript Printer Description (PPD) files for
  1800. the drivers are released. They are not complete at the moment but they
  1801. can be used to drive the printers' main features.
  1802.  
  1803. VERSION INFORMATION
  1804. -------------------
  1805.  
  1806. The BJC-600 driver is version 2.17.00 dated 5/23/96.
  1807. The BJC-800 driver is version 2.17.00 dated 5/23/96.
  1808.  
  1809.  
  1810. COMPILATION NOTES
  1811. -----------------
  1812.  
  1813. Configuration
  1814. -------------
  1815.  
  1816. * Default values for options and other stuff
  1817.  
  1818. Configuration for the drivers can be made by modifying default values
  1819. in the file gdevbjc.h or on the compilation line. If you don't do
  1820. that, the drivers use reasonable defaults that make them work "as
  1821. expected".
  1822.   All default values given below are defined in this file if you need
  1823. to change them to customize your installation (a bad idea, better use
  1824. options...).
  1825.  
  1826. * CMYK to RGB color conversion
  1827.  
  1828. By default, the drivers use the same algorithm as Ghostscript to
  1829. convert CMYK colors to RGB. If you prefer to use Adobe formulaes,
  1830. define USE_ADOBE_CMYK_RGB when compiling. (See the top of the
  1831. gdevcdj.c file to see the difference between the two.)
  1832.  
  1833. * Vertical centering of the printable area
  1834.  
  1835. The drivers center the imageable area horizontally, but not vertically
  1836. so that what can be printed does use the most of the output media. If
  1837. you define BJC_DEFAULT_CENTEREDAREA when compiling, then the top and
  1838. bottom margins will be the same, resulting in a (smaller) vertically
  1839. centered imageable area too.
  1840.  
  1841. * Margins
  1842.  
  1843. If you define USE_RECOMMENDED_MARGINS then the top and bottom margins
  1844. will be the same (i.e. BJC_DEFAULT_CENTEREDAREA will be defined for
  1845. you) and these margins will be those recommended by Canon, 12.4 mm.
  1846.   Because margins are a complicated thing (due to the fact that one
  1847. does rely on the mechanical precision of the printer), the drivers do
  1848. something about the bottom margin: by default the bottom margin is
  1849. 9.54 mm for the bjc600 driver and 7 mm for the bjc800 one. If you
  1850. define USE_TIGHT_MARGINS then the bottom margin is 7 mm for both
  1851. drivers (but I never managed to get my own bjc600 print a line on this
  1852. low bound, hence the greater default). Regardless of the presence of
  1853. this define, USE_FIXED_MARGINS will not allow the bjc800 to use the
  1854. lower 7 mm bottom margin, so if you have a problem with the bottom
  1855. margin on a bjc800, just define that (without defining USE_TIGHT_MARGINS,
  1856. of course).
  1857.  
  1858. Compilation
  1859. -----------
  1860.  
  1861. Make sure the bjc600 and/or bjc800 devices are in your DEVICE_DEVS
  1862. variable. That is look in the makefile for your platform and add them
  1863. if necessary. This means for example adding them to the DEVICE_DEVS6
  1864. variable. The line should read something like that:
  1865.  
  1866.     DEVICE_DEVS6=bj10e.dev bj200.dev bjc600.dev bjc800.dev
  1867.  
  1868. Now if you get an error from make saying that it does not know how to
  1869. make bjc800.dev it's because you have an old makefile with only the
  1870. bjc600 device in it. You then have to copy the lines explaining how to
  1871. make bjc800.dev in your makefile. These lines are in devs.mak (under
  1872. the lines for making bjc600.dev) and should go just after the lines
  1873. for making bjc600.dev.
  1874.  
  1875. Testing the margins
  1876. -------------------
  1877.  
  1878. A quick way to be sure that the margins you selected (see above) are
  1879. okay is to print a file whose contents are:
  1880.  
  1881.       %!
  1882.       clippath stroke showpage
  1883.  
  1884. If the margins are okay, you will obtain a rectangle surrounding the
  1885. printable area.
  1886.  
  1887. USE OF THE DRIVERS
  1888. ------------------
  1889.  
  1890. There are two drivers here: the "bjc600" one supports the BJC-600 and
  1891. BJC-4000 (maybe the BJC-70 as well) and the "bjc800" one supports the
  1892. BJC-800 series. When remarks here apply to both drivers, the name
  1893. "bjc" will be used.
  1894.  
  1895. Supported Options and Defaults
  1896. ------------------------------
  1897.  
  1898. (Note: the names "options", "properties" and "parameters" will be used
  1899. to designate the same thing: device parameters that you can change.)
  1900.  
  1901. Preamble: if an option is given an incorrect value, an error will
  1902. occur. Unless stated otherwise, this error will be a rangecheckerror.
  1903.   Options may be set from the gs command-line (using the -d and -s
  1904. switches or other predetermined switches if they have an effect on the
  1905. driver) or using the setpagedevice Level 2 operator if Ghostscript has
  1906. been compiled with the level2 device (it should ;-)). There are *no*
  1907. special-purpose operators as one was able to find in Level 1 printers.
  1908.  
  1909. The default number of bits per pixel for the bjc is 24 (unless you
  1910. change the value of BJC_BITSPERPIXEL) and corresponds to a CMYK
  1911. printing. Supported modes are 1 bpp and 4 bpp (gray levels), 8 bpp, 16
  1912. bpp, 24 bpp and 32 bpp (colours). Colours are preferrably stored in
  1913. the CMYK model (which means that with 16 bpp there are only 16
  1914. different shades of each color, for example) but it is possible to
  1915. store them as RGB color for some depths.
  1916.   Some modes do Floyd-Steinberg dithering while some others don't and
  1917. use the default Ghostscript halftoning (in fact, when halftoning is used
  1918. dithering takes also place but due to the low point density it is
  1919. usually not efficient and thus invisible).
  1920.  
  1921. Here is a short description of each printing mode (expressed in
  1922. bpp/colors):
  1923.  
  1924.   32/4  CMYK Colour printing, Floyd-Steinberg dithering.
  1925.   24/4    Id. (But each primary colour is stored on 6 bits instead of 8.)
  1926.  
  1927.   24/3  RGB colour printing, Floyd-Steinberg dithering. This mode will
  1928.         *not* use the black cartridge (that's why it exists, for when you
  1929.         don't want to use it ;-)). Each primary colour is stored on 8
  1930.         bits as in the 32/4 mode, but black generation and under-color
  1931.         removal are done on the driver side and not by Ghostscript so you
  1932.         do not have any control on it. (This mode is not supported anymore
  1933.         on this driver.)
  1934.  
  1935.   16/4  CMYK colour printing, halftoned by Ghostscript. FS dithering
  1936.         is still visible here (but the halftone patterns are visible
  1937.         too!).
  1938.  
  1939.   8/4    Id. (But each primary colour is stored on 2 bits instead of 4.)
  1940.  
  1941.   8/3   RGB colour printing. This mode is not intended to be
  1942.         used. What I mean is that it should be used only if you 
  1943.     want to use custom halftone screens *and* the halftoning is
  1944.     broken using the 8/4 mode (some versions of gs have this
  1945.     problem).
  1946.  
  1947.   8/1    Gray-levels printing, Floyd-Steinberg dithering.
  1948.  
  1949.   1/1    Gray-levels printing, halftoned by GhostScript.
  1950.  
  1951. These modes are selected using the BitsPerPixel *and* Colors integers
  1952. options (either from the command line or in a PostScript program using
  1953. setpagedevice). See below.
  1954.  
  1955. A note about darkness of what is printed: Canon printers do print dark,
  1956. really. And the Floyd-Steinberg dithering may eventually darken your image
  1957. too. So you may need to apply gamma correction by calling gs as in
  1958.  
  1959.   % gs -sDEVICE=bjc600 gamma.ps myfile.ps
  1960.  
  1961. where gamma.ps changes the gamma correction (here to 3 for all colors):
  1962.  
  1963.   { 0.45 exp } dup dup currenttransfer setcolortransfer
  1964.  
  1965. (0.45 being value giving good results for me, your mileage may vary;
  1966. the bigger the value the lighter the output).
  1967.  
  1968. The drivers support printing at 90 dpi, 180 dpi and 360 dpi. Horizontal and
  1969. vertical resolutions must be the same or a limitcheck error will happen. A
  1970. rangecheck will happen too if the resolution is not 90 * 2**n. (If the
  1971. driver is compiled with -DBJC_STRICT a rangecheck will also happen if
  1972. the resolution is not one of those supported. This is not the case as we
  1973. expect that there may be a 720 dpi bjc someday).
  1974.  
  1975. Here are the various options supported by the bjc drivers, along with
  1976. their type, supported values, effect(s) and usage:
  1977.  
  1978.   BitsPerPixel (int)    Choose the depth of the page. Valid values are
  1979.             1, 8, 16, 24 and 32. Default is 24.
  1980.               Note that when this is set for the first
  1981.             time, the Colors property is automatically
  1982.             adjusted unless it is also specified. Defaults
  1983.             adjustments are show in the table below,
  1984.             default choices are indicated by a star (*).
  1985.               This table gives also the corresponding
  1986.             color models and the rendering method that is
  1987.             visible (GS means Ghostscript halftoning, FS
  1988.             Floyd-Steinberg dithering, and if both are
  1989.             present it means that the dithering of
  1990.             halftones is visible).
  1991.  
  1992.             +-----+--------+---+----------+-------+
  1993.             | Bpp | Colors | * | C. Model | Dith. |
  1994.             +-----+--------+---+----------+-------+
  1995.             |  32 |      4 |   | CMYK     |    FS |
  1996.             +-----+--------+---+----------+-------+
  1997.             |  24 |      4 | * | CMYK     |    FS |
  1998.             |     |      3 |   | RGB      |    FS |
  1999.             +-----+--------+---+----------+-------+
  2000.             |  16 |      4 |   | CMYK     | GS FS |
  2001.             +-----+--------+---+----------+-------+
  2002.             |   8 |      4 | * | CMYK     | GS    |
  2003.             |     |      3 |   | RGB      | GS    |
  2004.             |     |      1 |   | K (CMYK) |    FS |
  2005.             +-----+--------+---+----------+-------+
  2006.             |   1 |      1 | * | K (CMYK) | GS    |
  2007.             +-----+--------+---+----------+-------+
  2008.  
  2009.                 Valid Colors values for allowed
  2010.                      BitsPerPixel values.
  2011.  
  2012.               Also note that automagical change of one
  2013.             parameter depending on the other one does not
  2014.             work in a setpagedevice call. This means that
  2015.             if you want to change BitsPerPixel to a value
  2016.             whose valid Colors values do not include the
  2017.             actual Colors value, you must change Colors
  2018.             too.
  2019.  
  2020.   Colors (int)        Choose the number of color components. Valid
  2021.             values are 1, 3 and 4. Default is 4.
  2022.               This setting cannot be used in a PostScript
  2023.             program, only on Ghostscript's command-line.
  2024.             See ProcessColorModel below for what to use to
  2025.             change the number of colors with PostScript
  2026.             code.
  2027.               Note that setting this property does limit
  2028.             the choices of BitsPerPixel. As for the
  2029.             previous property, its first setting may
  2030.             induce a setting of the "other value" (namely
  2031.             BitsPerPixel, here). Valid combinations are
  2032.             shown in the table below (XX indicates that
  2033.             the combination is valid, ** that this is the
  2034.             default).
  2035.  
  2036.             +--------+------+------------------------+
  2037.             |        |      | BitsPerPixel ok values |
  2038.             | Colors | Type +----+----+----+----+----+
  2039.             |        |      | 32 | 24 | 16 |  8 |  1 | 
  2040.             +--------+------+----+----+----+----+----+
  2041.             |      4 | CMYK | XX | ** | XX | XX |    |
  2042.             |      3 | RGB  |    | ** |    | XX |    |
  2043.             |      1 | K    |    |    |    | XX | ** |
  2044.             +--------+------+----+----+----+----+----+
  2045.  
  2046.                   Valid BitsPerPixel values
  2047.                   for allowed Colors values.
  2048.  
  2049.               Also note that automagical change of one
  2050.             parameter depending on the other one does not
  2051.             work in a setpagedevice call. This means that
  2052.             if you want to change Colors to a value whose
  2053.             valid BitsPerPixel values do not include the
  2054.             actual BitsPerPixel value, you must change
  2055.             BitsPerPixel too.
  2056.  
  2057.   ProcessColorModel (symbol)
  2058.             A symbol taken from /DeviceGray, /DeviceRGB
  2059.             or /DeviceCMYK which can be used to select 1,
  2060.             3 or 4 colors respectively.
  2061.               Note that this parameter takes precedence
  2062.             over the Colors one, and that both affect the
  2063.             same variable of the driver. (See Colors above
  2064.             for values combined with BitsPerPixel.)
  2065.  
  2066.   HWResolution (floats array)  
  2067.             An array of 2 floats giving the horizontal and
  2068.             vertical resolution in dots per inch. Supported
  2069.             values are 90, 180 and 360 and both values
  2070.             must be the same. Default is 360.
  2071.               (On the gs command line, the resolution is
  2072.             changed by saying "-rXDPIxYDPI".)
  2073.  
  2074.   ManualFeed (bool)    Indicate that the sheets won't be fed automatically
  2075.             by the printer. Default is false.
  2076.               (Not meaningful on the BJC-600, I fear.)
  2077.  
  2078.   MediaType (string)    Choose the media to print on. Values are chosen
  2079.             amongst "PlainPaper", "CoatedPaper",
  2080.             "TransparencyFilm", "Envelope", "Card" and "Other".
  2081.             Default is "PlainPaper".
  2082.               If the chosen media is "Envelope", "Card" or
  2083.             "Other", the driver will make the printer go
  2084.             in thick mode automatically regardless of the
  2085.             media weight.
  2086.  
  2087.   MediaWeight (int or null)
  2088.             Choose the weight of the media (in g/m2). Using
  2089.             null indicates that the weight is of no
  2090.                         importance. Default is null.
  2091.               If the specified media weight is greater
  2092.             than 105 (i.e. the value of the compilation 
  2093.                         default BJC???_MEDIAWEIGHT_THICKLIMIT) then
  2094.             the printer will be setup to use thick paper.
  2095.  
  2096.   PrintQuality (string) Choose the quality of printing. For the bjc600
  2097.             driver it can be one of "Normal", "High" and
  2098.             "Draft". For the bjc800 driver it can be one
  2099.             of "Low", "Normal", "High" and "Draft".
  2100.             Default is "Normal" for both drivers.
  2101.               For both drivers, "High" means 200% black and
  2102.             100% cyan, magenta and yellow (on a bjc600 you
  2103.             will get the "Bk+" light).
  2104.               For the bjc600 driver, "Normal" lits the
  2105.             "HQ" light while "Draft" unlits it.
  2106.               For the bjc800 driver, "Low" has the effect
  2107.             of making only two printing passes instead of
  2108.             four (should be twice as fast ;-)). This is
  2109.             what is known as "CN" (Color Normal) mode.
  2110.  
  2111.   DitheringType (string)
  2112.             Choose a dithering algorithm. Actually the
  2113.             only valid values are "Floyd-Steinberg" and
  2114.             "None". "None" is the default for 1/1 print
  2115.             mode, "Floyd-Steinberg" for other modes.
  2116.               At the moment this parameter is read-only,
  2117.             though no error will be generated if one tries
  2118.                         to change it.
  2119.               This parameter is not of much value at the
  2120.             moment and is mainly here to reserve the name
  2121.             for future addition of dithering algorithms.
  2122.  
  2123.   PrintColors (int)    Mask for printing color. If 0, use black for
  2124.             any color.
  2125.               Otherwise, the value must be the sum of any
  2126.                 of 1 (cyan), 2 (magenta), 4 (yellow) and 8
  2127.             (black), indicating which colors will be used
  2128.             for printing.
  2129.               When printing colour, only those colour
  2130.             specified will be printed (this means that
  2131.             some planes will be missing).
  2132.               When printing grays, black is used if it is
  2133.             present in the PrintColors; otherwise, the
  2134.             data is printed by superimposing each
  2135.             requested color.
  2136.             
  2137.   MonochromePrint (bool)
  2138.             *For bjc600 only*. Substitute black for Cyan,
  2139.             Magenta and Yellow when printing (useful for
  2140.             getting some monochrome output of a dithered
  2141.             printing for example). Default is false.
  2142.               This is a hardware mechanism as opposed to
  2143.             the previous software one. I think that using
  2144.             this or setting PrintColors to 0 will give the
  2145.             same results.
  2146.  
  2147. Note that the MediaType and ThickMedia options will be replaced by the use
  2148. of the device InputAttributes and OutputAttributes as soon as possible.
  2149.  
  2150. Please note too that the print mode may be reset at the start of a print,
  2151. not at the end. This is the expected behaviour. If you need to reset
  2152. the printer to its default state, simply print a file that does just a
  2153. showpage.
  2154.  
  2155. Device Informations
  2156. -------------------
  2157.  
  2158. Here are other informations published by the driver that you will find
  2159. in the deviceinfo dictionary:
  2160.  
  2161.   OutputFaceUp (bool)   This has the boolean value true, indicating that
  2162.             the sheets are stacked face up.
  2163.  
  2164.   Version (float)    In the form M.mmpp where M is the major version,
  2165.             mm the bjc drivers minor version and pp the specific
  2166.             driver minor version (that is, M.mm will always be
  2167.             the same for the bjc600 and bjc800 drivers).
  2168.  
  2169.   VersionString (string)
  2170.             A string that gives the version info plus
  2171.             other indications. At the moment, things like
  2172.             'a' or 'b' may follow the version to indicate
  2173.             alpha or beta versions and the date of the
  2174.             last change to this version is given in the
  2175.             form MM/DD/YY (no,  it won't adapt to your
  2176.             locale!).
  2177.  
  2178. Hardware Margins
  2179. ----------------
  2180.  
  2181. The BJC printers have top and bottom hardware margins of 3 mm and 7.1
  2182. mm respectively (Canon says 7 mm but this is not usable because of
  2183. the rounding of paper sizes to PostScript points).. The left margin is
  2184. 3.4 mm for A4 and smaller paper sizes, 6.4 mm for US paper sizes,
  2185. envelopes and cards. It is 4.0 mm for A3 paper on the BJC-800.
  2186.  
  2187. The maximum printing width of a BJC-600 printer is 203 mm, in any event.
  2188. The maximum printing width of a BJC-800 printer is 289 mm on A3 paper,
  2189. and 203 mm on letter and A4 paper.
  2190.  
  2191.  
  2192. POSTSCRIPT PRINTER DESCRIPTION FILES
  2193. ------------------------------------
  2194.  
  2195. The BJC600.PPD and BJC800.PPD files (whose long names are, respectively,
  2196. Canon_BubbleJetColor_600.ppd and Canon_BubbleJetColor_800.ppd) are PPD
  2197. files driving the features of the bjc600 and bjc800 drivers.
  2198.  
  2199. They can be used for example on NEXTSTEP systems (presumably on
  2200. OpenStep systems too) and on Unix systems with Adobe's TranScript and
  2201. pslpr (not tested).
  2202.  
  2203. The files are not complete at the moment. Please note too that
  2204. NEXTSTEP's printing interface does not correctly enforce constraints
  2205. specified in these files (in UIConstraints descriptions): you must
  2206. force yourself to use valid combinations of options.
  2207.  
  2208. Customization of the PPD files
  2209. ------------------------------
  2210.  
  2211. By default the files say that the paper used is US Letter, and they
  2212. use a normalized transfer function.
  2213.   If you choose to use A4 printing by default, you must replace Letter by
  2214. A4 in lines that match the '\*Default.*: Letter' pattern.
  2215.   Some versions of Ghostscript have problems with normalized colors,
  2216. which makes them add magenta in gray levels. If you have this problem,
  2217. replace the '*DefaultTransfer: Normalized' line by the alternate (correct)
  2218. '*DefaultTransfer: Null' line.
  2219.  
  2220. Also note that the 'Thick Media' option is implemented by choosing a
  2221. value of 120 or 80 (for thick and thin media respectively) for the
  2222. MediaWeight feature of the drivers. If you ever change the threshold
  2223. for thick media in the driver code, you may need to change the values
  2224. in the PPD files too.
  2225.  
  2226. All customization should be done using the '*Include: ' feature of PPD
  2227. files so that your local changes will be kept if you get an update of
  2228. these PPD files.
  2229.  
  2230.  
  2231. OTHER INFORMATIONS
  2232. ------------------
  2233.  
  2234. Reporting Problems
  2235. ------------------
  2236.  
  2237. When you report a problem please be as descriptive as possible, and
  2238. please send information that can be used to reproduce the problem.
  2239.   Please don't forget to tell me which driver you use and its
  2240. version. Version information can be found in this file or preferrably
  2241. by issuing the following command in a shell:
  2242.  
  2243.     % echo "currentpagedevice /VersionString get ==" | \
  2244.         gs -q -sDEVICE=bjc600 -
  2245.  
  2246. (the % doesn't count as part of the command and the device name should
  2247. be the device you really use).
  2248.  
  2249. Contact Address
  2250. ---------------
  2251.  
  2252. If you have problems with this driver (or if you are extremely
  2253. satisfied with it) you may email me at Yves.Arrouye@marin.fdn.fr.
  2254.  
  2255. Acknowledgements
  2256. ----------------
  2257.  
  2258. I am particularly grateful to Yoshio Kuniyoshi <yoshio@nak.math.keio.ac.jp>
  2259. without whom I'd never make these drivers and also to L. Peter Deutsch
  2260. <ghost@aladdin.com> who answered *all* my (often silly) questions about
  2261. the drivers interface used by Ghostscript.
  2262.   Thanks also to the people who volunteered to beta-test the v2.x BJC
  2263. drivers; David Gaudine <david@donald.concordia.ca>, Robert M. Kenney
  2264. <rmk@unh.edu>, James McPherson <someone@erols.com> and Ian Thurlbeck
  2265. <ian@stams.strath.ac.uk> (in an alphabetic listing) were particularly
  2266. helpful by discovering bugs and helping find out exact paper margins on
  2267. printers I don't have access to.
  2268.   And *many* thanks to Klaus-Gunther Hess <gunther@elmos.de> for
  2269. looking at the dithering code and devising a good CMYK dithering
  2270. algorithm for the Stylus Color, which I then adapted to the code of
  2271. these drivers.
  2272.  
  2273. ### ------------------------------ End --------------------------------- ###
  2274.  
  2275. ### ---------------- MS-Windows DIB printer driver ----------------- ###
  2276.  
  2277. This section was written by Russell Lang, 4 September 1996
  2278.  
  2279. The mswinpr2 device uses MS-Windows printer drivers and should work
  2280. with any printer with DIB raster capabilities.
  2281. The printer resolution cannot be selected using PostScript commands 
  2282. from Ghostscript; use the printer setup in the Control Panel instead.
  2283.  
  2284. If no Windows printer name is specified in -sOutputFile, Ghostscript
  2285. will prompt for a Windows printer using the standard Print Setup
  2286. dialog box.  You must set the orientation to Portrait, and you must
  2287. set the page size to that expected by Ghostscript.  Failure to do so 
  2288. will result in the image being clipped. Ghostscript sets the physical 
  2289. device size to that of the Windows printer driver, but it does not 
  2290. update the PostScript clipping path.
  2291.  
  2292. If a Windows printer name is specified in -sOutputFile, using 
  2293. the format "\\spool\printer_name", e.g.
  2294.   -sOutputFile="\\spool\Apple LaserWriter II NT"
  2295. then Ghostscript will attempt to open the Windows printer without
  2296. any prompts (except of course if the printer is connected to FILE:).
  2297. Ghostscript attempts to set the Windows printer page size and orientation
  2298. to match that expected by Ghostscript, but doesn't always succeed.
  2299. The following algorithm is used:
  2300. - If the requested page size matches one of the Windows standard
  2301.   page sizes +/- 2mm, ask for that standard size.
  2302. - Otherwise if the requested page size matches one of the Windows 
  2303.   standard page sizes in landscape mode, ask for that standard size
  2304.   in landscape.
  2305. - Otherwise ask for the page size by specifying its dimensions only.
  2306. - If using Windows NT, select a form that matches the page size.
  2307.   (This isn't working at the moment)
  2308. - Merge the above requests with the defaults.
  2309.   If the printer driver ignores the requested paper size, no
  2310.   error will be generated.  It will print on the wrong paper size.
  2311. - Open the Windows printer with the merged orientation and size.
  2312. The Ghostscript physical device size will be updated to match
  2313. the Windows printer physical device.
  2314.  
  2315. ### ------------------------- JPEG file format ------------------------- ###
  2316.  
  2317. Ghostscript includes output drivers that can produce JPEG (JFIF) files from
  2318. Postscript images.  *Please note* that JPEG is designed for continuous-tone
  2319. images (such as photographs) and is therefore quite unsuitable for the vast
  2320. majority of page images produced with Postscript.  If you get crummy-looking
  2321. JPEG files, don't blame Ghostscript; instead consult a reference about uses
  2322. and abuses of JPEG, such as the JPEG FAQ available at
  2323. http://www.faqs.org/faqs/jpeg-faq/.
  2324.  
  2325. There are two JPEG output drivers, "jpeg" to produce color JPEG files and
  2326. "jpeggray" to produce grayscale JPEGs.  Basic usage is the same as for other
  2327. file-format drivers: specify the device name and an output file name, for
  2328. example
  2329.     gs -sDEVICE=jpeg -sOutputFile=foo.jpg  foo.ps
  2330. You can also use the -r switch to determine the imaging resolution and thus
  2331. the output file's size in pixels.  (The default resolution is normally
  2332. 72x72dpi.)
  2333.  
  2334. The JPEG devices support two special parameters to control the JPEG "quality
  2335. setting" (DCT quantization level).  You can write
  2336.     -dJPEGQ=number
  2337. to set the quality level according to the widely used IJG quality scale; or
  2338. if you prefer Adobe's QFactor quality scale, use
  2339.     -dQFactor=number
  2340. The QFactor scale is used by Postscript's DCTEncode filter but is nearly
  2341. unheard-of elsewhere.
  2342.  
  2343. -dJPEGQ accepts an integer from 0 to 100, while -dQFactor expects a decimal
  2344. fraction near 1.0.  The default quality level is equivalent to -dJPEGQ=75.
  2345. (At this writing, that is the same as -dQFactor=0.5; but the IJG default
  2346. quality level might change in future releases.)
  2347.  
  2348. The JPEG drivers could be extended to support additional JPEG compression
  2349. options, such as the other DCTEncode filter parameters, but so far they
  2350. haven't been.
  2351.  
  2352. ### ------------------------------ End --------------------------------- ###
  2353.